将数组中的所有对象合并为一个

时间:2016-07-07 15:14:18

标签: javascript arrays object

我有一个对象数组arr,我想将数组中的所有对象合并为一个。对象中还有重复的键。有没有办法可以做到这一点?任何帮助都会很棒。

var arr = [{ a: 1, a: 2 },
{ c: 1, d: 2 },
{ e: 14, f: 20 }];

我想要的输出是:

var arr = [{ a: 1, 
             a1: 2, 
             c: 1, 
             d: 2, 
             e: 14, 
             f: 20 }];

3 个答案:

答案 0 :(得分:2)

假设所有密钥都是唯一的,并且您不想检查,请使用reduce

var combinedKeys = arr.reduce(function(a, item) {
    Object.keys(item).map(function(key) {
        a[key] = item[key];
    });

    return a;
}, {});

var singleArrayOfCombinedKeys = [combinedKeys]; //[Object  a: 1b: 2c: 1d: 2e: 14f: 20__proto__: Object]

答案 1 :(得分:2)

您可以使用for循环简单地遍历数组,并将每个项目的所有属性分配给组合对象:

var arr = [{ a: 1, b: 2 },
{ c: 1, d: 2 },
{ e: 14, f: 20 }];

var combinedObj = {};

for( var i = 0; i < arr.length; i++ )
{
  var item = arr[i];
  for(var key in item )
  {
    combinedObj[key] = item[key];
  }//for()
}//for

console.log( combinedObj );

答案 2 :(得分:2)

您可以使用reduce()Object.assign()

var arr = [{ a: 1, b: 2 }, { c: 1, d: 2 }, { e: 14, f: 20 }];

var result  = [arr.reduce((r, o) => Object.assign(r, o), {})];
console.log(result)