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/24444738/

相关文章:

php - 为 PDF 动态创建 map

javascript - 比较两个数组的值并相应地创建对象

java - 横向二维锯齿状数组,列优先

java - 使用 java 对象创建一个简单的数学游戏

javascript - 如果数组包含 2 个相同的对象,则改变第二个(或第三个、第四个)对象的值

javascript - knockout 和 MVC 2.0

javascript - jQuery JSTree "uncheck node"性能问题

php - 将数组值存储在单独的行中

javascript - 访问/修改函数内部的对象 | javascript

javascript - 如何删除对象的第一个属性?