将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等)可能是他在生产中处理的简化版本。是的,同意……感谢您的宝贵意见……我已经更新了答案