添加对象数组javascript的值
Posted
技术标签:
【中文标题】添加对象数组javascript的值【英文标题】:Adding up the values of an array of objects javascript 【发布时间】:2020-09-14 00:53:05 【问题描述】:我有一个这样的对象数组:const array=[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;
, )
【问题讨论】:
【参考方案1】:你需要在分配之前初始化acc
,所以下面的小修改就可以了
const array=[a:1, b:1 , a:2, b:3 ,a:1, b:1]
const res = array.reduce((acc, n) =>
for (var prop in n)
acc[prop] = acc[prop] || 0; // Need to initialize before assigning
if (n.hasOwnProperty(prop))
acc[prop] += n[prop];
return acc;
, )
console.log(res);
【讨论】:
【参考方案2】:这会起作用
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(let key in v)
a[key] = a[key] ? a[key] + v[key] : v[key];
return a
,)
console.log(res)
【讨论】:
静态指定对象属性似乎不是最好的解决方案,因为我相信他的示例对象(obj.a、obj.b 等)可能是他正在处理的内容的简化版本生产。 是的,同意...感谢您的宝贵意见..我已经更新了答案【参考方案3】:您可以使用此代码,而不必手动指定对象属性,如果它不存在,它将创建一个新属性,如果存在则添加到现有属性。
var myarr = [a: 2, b: 3, a:3, b:2];
var newobj = ;
for (var i=0; i <= myarr.length; i += 1)
for (var p in myarr[i]) newobj[p] = (p in newobj) ?
newobj[p] + myarr[i][p] : myarr[i][p]
console.log(newobj);
【讨论】:
【参考方案4】:使用forEach
和Object.entries
会简化。
const array = [
a: 1, b: 1 ,
a: 2, b: 3 ,
a: 1, b: 1 ,
];
const acc = (arr) =>
const res = ;
arr.forEach((obj) =>
Object.entries(obj).forEach(
([key, value]) => (res[key] = key in res ? res[key] + value : value)
)
);
return [res];
;
console.log(acc(array));
【讨论】:
以上是关于添加对象数组javascript的值的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript原生对象属性和方法详解——Array对象 转载
JavaScript原生对象属性和方法详解——Array对象