首页 > web前端 > js教程 > 正文

如何在 JavaScript 对象数组中合并重复的键并对它们的值求和?

Linda Hamilton
发布: 2024-11-28 03:47:10
原创
812 人浏览过

How to Merge Duplicate Keys and Sum Their Values in a JavaScript Object Array?

合并对象数组中的重复键并对值求和

在 JavaScript 中,处理对象数组很常见。有时,我们可能会遇到需要对数组中的对象进行分组和修改,同时保留特定属性的情况。其中一种场景涉及对与相似键关联的值进行求和。

让我们通过一个示例对象数组来探索此任务:

const objects = [
  { 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 },
];
登录后复制

为了实现这一点,我们可以利用 JavaScript 的对象和数组操作功能。这是一个分步解决方案:

1.创建一个对象来存储求和值

首先创建一个名为“holder”的空 JavaScript 对象,该对象将用作存储每个“名称”的求和值的容器。

2.迭代输入数组

使用“forEach”循环迭代输入数组中的每个对象(“objects”)。

3.检查“holder”中是否存在名称

在循环内,使用“hasOwnProperty(d.name)”检查当前对象的“name”属性是否已作为属性存在于“holder”对象中。

4.求和或初始化值

如果 'name' 属性存在,则将当前对象的 'value' 属性添加到 'holder' 中的相应属性(例如 'holder[d.name] = d.value ')。如果未找到“name”属性,则使用当前对象的“value”属性对其进行初始化(“holder[d.name] = d.value”)。

5.创建包含合并对象的新数组

将所有值相加后,创建一个名为“obj2”的新空数组来存储合并的对象。

6.迭代“holder”并推送合并对象

使用另一个循环迭代“holder”对象的属性(“for (var prop inholder)”)。对于每个属性,创建一个具有“name”和“value”属性的新对象,并将其推入“obj2”。

7.记录输出

最后,将“obj2”数组记录到控制台以查看具有总和“value”属性的合并对象。

示例代码

这里是一个代码片段演示了解决方案:

const objects = [
  { name: 'P1', value: 150 },
  { name: 'P1', value: 150 },
  { name: 'P2', value: 200 },
  { name: 'P3', value: 450 },
];

const holder = {};

objects.forEach(d => {
  if (holder.hasOwnProperty(d.name)) {
    holder[d.name] += d.value;
  } else {
    holder[d.name] = d.value;
  }
});

const obj2 = [];

for (var prop in holder) {
  obj2.push({ name: prop, value: holder[prop] });
}

console.log(obj2);
登录后复制

通过执行以下步骤,您可以有效地对与相似的关联值进行分组和求和对象数组中的键,根据所需的输出创建一个包含修改后的对象的新数组。

以上是如何在 JavaScript 对象数组中合并重复的键并对它们的值求和?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板