合并两个对象阵列并组合在相同的键上

时间:2018-06-14 23:50:48

标签: javascript

给出不同长度的A和B:

A = [
  {X: "a", Y: 5},
  {X: "b", Y: 10},
  {X: "c", Y: 15}
];

B = [
  {X: "a", Z: 5},
  {X: "d", Z: 10}
];

生成以下数组:

C = [    
  {X: "a", Y: 5, Z: 5},
  {X: "b", Y: 10},
  {X: "c", Y: 15},
  {X: "d", Z: 10}
]

因此,在X相同的情况下,非X的键连接在一起。由于“a”共享Y和Z,它们被加在一起。

只有当X相同时才会加入。

最重要的解决方案是:

C = A.concat(B);

// filter down C to remove duplicate X's
for (i = 0; i < C.length - 1; i++) {
  for (j = 1; j < C.length; j++) {
    if (C[i]['X'] == C[j]['X']) {
      // concatenate the keys together and delete one pair 
    }
  }
}
// keep on looping until no duplicates...

对此有什么合适的解决方案?

1 个答案:

答案 0 :(得分:1)

我对要求/问题感到困惑,但我相信你想要的东西如下:

&#13;
&#13;
var A = [
    {X: "a", Y: 5},
    {X: "b", Y: 10},
    {X: "c", Y: 15}
];

var B = [
    {X: "a", Z: 5},
    {X: "d", Z: 10}
];

var C = A.concat(B), temp = {}, result = [];

C.forEach(function(o, i) {
   temp[o.X] = temp[o.X] || o;
   for(var k in o) temp[o.X][k] = o[k];
});


for(var i in temp) result.push(temp[i]);

console.log(result);
&#13;
&#13;
&#13;

如果这是您想要的结果,那么它也可以在es-6中重写,但我保持简单,具体取决于您的代码示例。