javascript - 对对象数组中相似的键求和

标签 javascript arrays object

我有一个如下所示的对象数组:

[
    {
        '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/

相关文章:

c - 如何在c中返回char数组指针。

Javascript 生成的表不起作用

arrays - 在 Swift 4.0 中过滤结构数组

javascript - 为什么这个 URL 参数没有用 jQuery 隐藏这个 div?

javascript - 用户脚本在页面刷新时循环

javascript - 带有明确 .set() 用途的 Node ?

javascript - WebGL 中的模板缓冲区

javascript新对象构造函数替代正确吗?

PHP/MYSQL错误: Object of class mysqli_result could not be converted to string

c++ - 比较两个对象之间的实例。 C++