Javascript 按键将数组中的对象合并为一个对象

Javascript 按键将数组中的对象合并为一个对象,javascript,arrays,ecmascript-6,javascript-objects,Javascript,Arrays,Ecmascript 6,Javascript Objects,我试图将数组中的对象合并为一个,如果它们具有相同的键 具有此阵列: let data = [ { id: "1", cars: 5 }, { id: "1", pasta: 2 }, { id: "2", cars: 0 }, { id: "2", pasta: 0 }, ]; 我希望做到这一点: let data = [ { id: "1", cars: 5, past

我试图将数组中的对象合并为一个,如果它们具有相同的键

具有此阵列:

let data = [
  { id: "1", cars: 5 }, 
  { id: "1", pasta: 2 },
  { id: "2", cars: 0 }, 
  { id: "2", pasta: 0 },
];
我希望做到这一点:

let data = [
  { id: "1", cars: 5, pasta: 2 },
  { id: "2", cars: 0, pasta: 0 },
];

我正在寻找任何解决方案,但最好是ES6。

这里有一个解决方案,它结合了数组
reduce
方法和对象
方法。这种方法的一个好处是O(n)时间复杂度,只有当您拥有大量数据时,时间复杂度才真正重要,但仍然可能比在循环中包含循环的解决方案更有效

let数据=[
{id:“1”,汽车:5},
{id:“1”,意大利面:2},
{id:“2”,汽车:0},
{id:“2”,意大利面:0},
];
const combined=对象值(数据减少((acc,el)=>{
acc[el.id]={…acc[el.id],…el};
返回acc;
}, {}));
控制台日志(组合)使用:

let数据=[
{id:“1”,汽车:5},
{id:“1”,意大利面:2},
{id:“2”,汽车:0},
{id:“2”,意大利面:0},
]
const result=data.reduce((项目,项目)=>{
const existingItem=items.find(({id})=>id==item.id)
if(existingItem)对象。分配(existingItem,item)
else items.push({…item})
退货项目
}, [])
console.log(结果)
//原始阵列保持不变:
console.log(数据)