将javascript对象数组的值相加

将javascript对象数组的值相加,javascript,arrays,reactjs,performance,ecmascript-6,Javascript,Arrays,Reactjs,Performance,Ecmascript 6,我有这样一个对象数组:const数组=[{a:1,b:1},{a:2,b:3},{a:1,b:1}] 我想要一个类似results=[{a:4,b:5}]的数组,它是对象数组中根据键的所有值的总和 我尝试过类似的方法,但有时会跳过数组中的第一个对象: array.reduce((acc, n) => { for (var prop in n) { if (acc.hasOwnProperty(prop)) acc[prop] +=

我有这样一个对象数组:
const数组=[{a:1,b:1},{a:2,b:3},{a:1,b:1}]

我想要一个类似results=[{a:4,b:5}]的数组,它是对象数组中根据键的所有值的总和

我尝试过类似的方法,但有时会跳过数组中的第一个对象:

       array.reduce((acc, n) => {
          for (var prop in n) {
            if (acc.hasOwnProperty(prop)) acc[prop] += n[prop];
            else acc[prop] = 0;
          }
          return acc;
        }, {})

在分配之前,您需要初始化
acc
,因此下面的小修改将起作用

const数组=[{a:1,b:1},{a:2,b:3},{a:1,b:1}]
const res=数组。reduce((acc,n)=>{
for(n中的var prop){
acc[prop]=acc[prop]| | 0;//分配前需要初始化
如果(n.hasOwnProperty(prop)){
acc[prop]+=n[prop];
} 
}
返回acc;
}, {})

控制台日志(res)这将起作用

const res=[{a:1,b:1,c:1},{a:2,b:3,c:3},{a:1,b:1,c:3}]。reduce((a,v,i)=>{
for(输入v){
a[键]=a[键]?a[键]+v[键]:v[键];
}
归还
},{})

console.log(res)
您可以使用此代码,无需手动指定对象属性,如果不存在,它将创建一个新属性,如果存在,则添加到现有属性

var myarr=[{a:2,b:3},{a:3,b:2}];
var newobj={};

对于(var i=0;i使用
forEach
对象。条目将简化

const数组=[
{a:1,b:1},
{a:2,b:3},
{a:1,b:1},
];
常数acc=(arr)=>{
常数res={};
arr.forEach((obj)=>
Object.entries(obj.forEach)(
([key,value])=>(res[key]=res中的key?res[key]+value:value)
)
);
返回[res];
};

console.log(acc(array));
静态指定对象属性似乎不是最好的解决方案,因为我相信他的示例对象(obj.a、obj.b等)可能是他在生产中处理的简化版本。是的,同意……感谢您的宝贵意见……我已经更新了答案