我有一个如下所示的对象数组:
[
{
'name': 'P1',
'value': 150
},
{
'name': 'P1',
'value': 150
},
{
'name': 'P2',
'value': 200
},
{
'name': 'P3',
'value': 450
}
]
我需要将同名对象的所有值相加。 (可能还有其他数学运算,例如计算平均值。)对于上面的示例,结果将是:
[
{
'name': 'P1',
'value': 300
},
{
'name': 'P2',
'value': 200
},
{
'name': 'P3',
'value': 450
}
]
最佳答案
首先遍历数组并将“名称”插入另一个对象的属性中。如果属性存在,则将“值”添加到属性的值中,否则将属性初始化为“值”。构建此对象后,迭代属性并将它们推送到另一个数组。
这是一些代码:
var obj = [
{ 'name': 'P1', 'value': 150 },
{ 'name': 'P1', 'value': 150 },
{ 'name': 'P2', 'value': 200 },
{ 'name': 'P3', 'value': 450 }
];
var holder = {};
obj.forEach(function(d) {
if (holder.hasOwnProperty(d.name)) {
holder[d.name] = holder[d.name] + d.value;
} else {
holder[d.name] = d.value;
}
});
var obj2 = [];
for (var prop in holder) {
obj2.push({ name: prop, value: holder[prop] });
}
console.log(obj2);
希望这有帮助。
关于javascript - 对对象数组中相似的键求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39718316/