如何合并 JSON 个具有相同名称的对象

How to merge JSON Objects having same name

最初我有 Json 数组,它是使用 underscore groupBy 函数的数组对象数组,我已经分组并且每个都分组但是我又想合并所有数组具有相同的对象名称,下面是我想要实现的方式,有人可以帮助我吗?

即我在 JSON 数组中有相同 JSON 具有相同 versionId 的对象,现在我想合并所有具有相同 versionId[=19= 的 JSON 对象]

有人可以帮助使用 underscoreLodash 框架轻松完成吗

输入JSON

[
  {
    "21289": [
      {
        "id": 255463,
        "orderId": 226433,
        "status": 1,
        "executedOn": "25/Sep/17",
        "executedBy": "Person A",
        "executedByDisplay": "Person A",
        "cycleId": 4042,
        "cycleName": "Cycle A",
        "versionId": 21289,
        "versionName": "Version A",
        "issueKey": "A"
      },
      {
        "id": 255433,
        "orderId": 226403,
        "status": 1,
        "executedOn": "25/Sep/17",
        "executedBy": "Person B",
        "executedByDisplay": "Person B",
        "cycleId": 4041,
        "cycleName": "Cycle B",
        "versionId": 21289,
        "versionName": "Version A",
        "issueKey": "B"
      },
      {
        "id": 255432,
        "orderId": 226402,
        "status": 1,
        "executedOn": "25/Sep/17",
        "executedBy": "Person B",
        "executedByDisplay": "Person B",
        "cycleId": 4041,
        "cycleName": "Cycle B",
        "versionId": 21289,
        "versionName": "Version A",
        "issueKey": "C"
      }
    ],
    "21291": [
      {
        "id": 252067,
        "orderId": 223258,
        "status": 1,
        "executedOn": "12/Sep/17",
        "executedBy": "Person C",
        "executedByDisplay": "Person C",
        "cycleId": 3985,
        "cycleName": "Cycle C",
        "versionId": 21291,
        "versionName": "Version B",
        "issueKey": "D"
      },
      {
        "id": 252014,
        "orderId": 223205,
        "status": 1,
        "executedOn": "12/Sep/17",
        "executedBy": "Person C",
        "executedByDisplay": "Person C",
        "cycleId": 3985,
        "cycleName": "Cycle C",
        "versionId": 21291,
        "versionName": "Version B",
        "issueKey": "E"
      },
      {
        "id": 252012,
        "orderId": 223203,
        "status": 1,
        "executedOn": "11/Sep/17",
        "executedBy": "Person D",
        "executedByDisplay": "Person D",
        "cycleId": 3985,
        "cycleName": "Cycle C",
        "versionId": 21291,
        "versionName": "Version B",
        "issueKey": "F"
      }
    ]
  },
  {
    "21291": [
      {
        "id": 251449,
        "orderId": 222640,
        "status": 1,
        "executedOn": "31/Aug/17",
        "executedBy": "Person E",
        "executedByDisplay": "Person E",
        "cycleId": 3978,
        "cycleName": "Cycle D",
        "versionId": 21291,
        "versionName": "Version B",
        "issueKey": "G"
      },
      {
        "id": 251299,
        "orderId": 222490,
        "status": 1,
        "executedOn": "1/Sep/17",
        "executedBy": "Person F",
        "executedByDisplay": "Person F",
        "cycleId": 3977,
        "cycleName": "Cycle E",
        "versionId": 21291,
        "versionName": "Version B",
        "issueKey": "H"
      }
    ],
    "31457": [
      {
        "id": 250969,
        "orderId": 222160,
        "status": 1,
        "executedOn": "29/Aug/17",
        "executedBy": "Person G",
        "executedByDisplay": "Person G",
        "cycleId": 3973,
        "cycleName": "Cycle F",
        "versionId": 31457,
        "versionName": "Version C",
        "issueKey": "I"
      },
      {
        "id": 250871,
        "orderId": 222062,
        "status": 1,
        "executedOn": "31/Aug/17",
        "executedBy": "Person D",
        "executedByDisplay": "Person D",
        "cycleId": 3973,
        "cycleName": "Cycle F",
        "versionId": 31457,
        "versionName": "Version C",
        "issueKey": "J"
      },
      {
        "id": 250869,
        "orderId": 222060,
        "status": 1,
        "executedOn": "4/Sep/17",
        "executedBy": "Person H",
        "executedByDisplay": "Person H",
        "cycleId": 3973,
        "cycleName": "Cycle F",
        "versionId": 31457,
        "versionName": "Version C",
        "issueKey": "K"
      }
    ]
  }
]

输出我想要的JSON

[
  {
    "21289": [
      {
        "id": 255463,
        "orderId": 226433,
        "status": 1,
        "executedOn": "25/Sep/17",
        "executedBy": "Person A",
        "executedByDisplay": "Person A",
        "cycleId": 4042,
        "cycleName": "Cycle A",
        "versionId": 21289,
        "versionName": "Version A",
        "issueKey": "A"
      },
      {
        "id": 255433,
        "orderId": 226403,
        "status": 1,
        "executedOn": "25/Sep/17",
        "executedBy": "Person B",
        "executedByDisplay": "Person B",
        "cycleId": 4041,
        "cycleName": "Cycle B",
        "versionId": 21289,
        "versionName": "Version A",
        "issueKey": "B"
      },
      {
        "id": 255432,
        "orderId": 226402,
        "status": 1,
        "executedOn": "25/Sep/17",
        "executedBy": "Person B",
        "executedByDisplay": "Person B",
        "cycleId": 4041,
        "cycleName": "Cycle B",
        "versionId": 21289,
        "versionName": "Version A",
        "issueKey": "C"
      }
    ],
    "21291": [
      {
        "id": 252067,
        "orderId": 223258,
        "status": 1,
        "executedOn": "12/Sep/17",
        "executedBy": "Person C",
        "executedByDisplay": "Person C",
        "cycleId": 3985,
        "cycleName": "Cycle C",
        "versionId": 21291,
        "versionName": "Version B",
        "issueKey": "D"
      },
      {
        "id": 252014,
        "orderId": 223205,
        "status": 1,
        "executedOn": "12/Sep/17",
        "executedBy": "Person C",
        "executedByDisplay": "Person C",
        "cycleId": 3985,
        "cycleName": "Cycle C",
        "versionId": 21291,
        "versionName": "Version B",
        "issueKey": "E"
      },
      {
        "id": 252012,
        "orderId": 223203,
        "status": 1,
        "executedOn": "11/Sep/17",
        "executedBy": "Person D",
        "executedByDisplay": "Person D",
        "cycleId": 3985,
        "cycleName": "Cycle C",
        "versionId": 21291,
        "versionName": "Version B",
        "issueKey": "F"
      },
      {
        "id": 251449,
        "orderId": 222640,
        "status": 1,
        "executedOn": "31/Aug/17",
        "executedBy": "Person E",
        "executedByDisplay": "Person E",
        "cycleId": 3978,
        "cycleName": "Cycle D",
        "versionId": 21291,
        "versionName": "Version B",
        "issueKey": "G"
      },
      {
        "id": 251299,
        "orderId": 222490,
        "status": 1,
        "executedOn": "1/Sep/17",
        "executedBy": "Person F",
        "executedByDisplay": "Person F",
        "cycleId": 3977,
        "cycleName": "Cycle E",
        "versionId": 21291,
        "versionName": "Version B",
        "issueKey": "H"
      }
    ],
    "31457": [
      {
        "id": 250969,
        "orderId": 222160,
        "status": 1,
        "executedOn": "29/Aug/17",
        "executedBy": "Person G",
        "executedByDisplay": "Person G",
        "cycleId": 3973,
        "cycleName": "Cycle F",
        "versionId": 31457,
        "versionName": "Version C",
        "issueKey": "I"
      },
      {
        "id": 250871,
        "orderId": 222062,
        "status": 1,
        "executedOn": "31/Aug/17",
        "executedBy": "Person D",
        "executedByDisplay": "Person D",
        "cycleId": 3973,
        "cycleName": "Cycle F",
        "versionId": 31457,
        "versionName": "Version C",
        "issueKey": "J"
      },
      {
        "id": 250869,
        "orderId": 222060,
        "status": 1,
        "executedOn": "4/Sep/17",
        "executedBy": "Person H",
        "executedByDisplay": "Person H",
        "cycleId": 3973,
        "cycleName": "Cycle F",
        "versionId": 31457,
        "versionName": "Version C",
        "issueKey": "K"
      }
    ]
  }
]

如果您知道结构将完全像这样,这里有一个非常简单的解决方案:

var a = [
  {
    "21289": [
      {
        "id": 255463,
        "orderId": 226433,
        "status": 1,
        "executedOn": "25/Sep/17",
        "executedBy": "Person A",
        "executedByDisplay": "Person A",
        "cycleId": 4042,
        "cycleName": "Cycle A",
        "versionId": 21289,
        "versionName": "Version A",
        "issueKey": "A"
      },
      {
        "id": 255433,
        "orderId": 226403,
        "status": 1,
        "executedOn": "25/Sep/17",
        "executedBy": "Person B",
        "executedByDisplay": "Person B",
        "cycleId": 4041,
        "cycleName": "Cycle B",
        "versionId": 21289,
        "versionName": "Version A",
        "issueKey": "B"
      },
      {
        "id": 255432,
        "orderId": 226402,
        "status": 1,
        "executedOn": "25/Sep/17",
        "executedBy": "Person B",
        "executedByDisplay": "Person B",
        "cycleId": 4041,
        "cycleName": "Cycle B",
        "versionId": 21289,
        "versionName": "Version A",
        "issueKey": "C"
      }
    ],
    "21291": [
      {
        "id": 252067,
        "orderId": 223258,
        "status": 1,
        "executedOn": "12/Sep/17",
        "executedBy": "Person C",
        "executedByDisplay": "Person C",
        "cycleId": 3985,
        "cycleName": "Cycle C",
        "versionId": 21291,
        "versionName": "Version B",
        "issueKey": "D"
      },
      {
        "id": 252014,
        "orderId": 223205,
        "status": 1,
        "executedOn": "12/Sep/17",
        "executedBy": "Person C",
        "executedByDisplay": "Person C",
        "cycleId": 3985,
        "cycleName": "Cycle C",
        "versionId": 21291,
        "versionName": "Version B",
        "issueKey": "E"
      },
      {
        "id": 252012,
        "orderId": 223203,
        "status": 1,
        "executedOn": "11/Sep/17",
        "executedBy": "Person D",
        "executedByDisplay": "Person D",
        "cycleId": 3985,
        "cycleName": "Cycle C",
        "versionId": 21291,
        "versionName": "Version B",
        "issueKey": "F"
      }
    ]
  },
  {
    "21291": [
      {
        "id": 251449,
        "orderId": 222640,
        "status": 1,
        "executedOn": "31/Aug/17",
        "executedBy": "Person E",
        "executedByDisplay": "Person E",
        "cycleId": 3978,
        "cycleName": "Cycle D",
        "versionId": 21291,
        "versionName": "Version B",
        "issueKey": "G"
      },
      {
        "id": 251299,
        "orderId": 222490,
        "status": 1,
        "executedOn": "1/Sep/17",
        "executedBy": "Person F",
        "executedByDisplay": "Person F",
        "cycleId": 3977,
        "cycleName": "Cycle E",
        "versionId": 21291,
        "versionName": "Version B",
        "issueKey": "H"
      }
    ],
    "31457": [
      {
        "id": 250969,
        "orderId": 222160,
        "status": 1,
        "executedOn": "29/Aug/17",
        "executedBy": "Person G",
        "executedByDisplay": "Person G",
        "cycleId": 3973,
        "cycleName": "Cycle F",
        "versionId": 31457,
        "versionName": "Version C",
        "issueKey": "I"
      },
      {
        "id": 250871,
        "orderId": 222062,
        "status": 1,
        "executedOn": "31/Aug/17",
        "executedBy": "Person D",
        "executedByDisplay": "Person D",
        "cycleId": 3973,
        "cycleName": "Cycle F",
        "versionId": 31457,
        "versionName": "Version C",
        "issueKey": "J"
      },
      {
        "id": 250869,
        "orderId": 222060,
        "status": 1,
        "executedOn": "4/Sep/17",
        "executedBy": "Person H",
        "executedByDisplay": "Person H",
        "cycleId": 3973,
        "cycleName": "Cycle F",
        "versionId": 31457,
        "versionName": "Version C",
        "issueKey": "K"
      }
    ]
  }
];

function filterKeys(result, obj) {
  for (var key in obj) {
   result[key] = (key in result? result[key].concat(obj[key]) : obj[key]);
  }
  return result;
}
console.log(a.reduce(filterKeys, {}));