在 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 的对象和数组操作功能。这是一个分步解决方案:
首先创建一个名为“holder”的空 JavaScript 对象,该对象将用作存储每个“名称”的求和值的容器。
使用“forEach”循环迭代输入数组中的每个对象(“objects”)。
在循环内,使用“hasOwnProperty(d.name)”检查当前对象的“name”属性是否已作为属性存在于“holder”对象中。
如果 'name' 属性存在,则将当前对象的 'value' 属性添加到 'holder' 中的相应属性(例如 'holder[d.name] = d.value ')。如果未找到“name”属性,则使用当前对象的“value”属性对其进行初始化(“holder[d.name] = d.value”)。
将所有值相加后,创建一个名为“obj2”的新空数组来存储合并的对象。
使用另一个循环迭代“holder”对象的属性(“for (var prop inholder)”)。对于每个属性,创建一个具有“name”和“value”属性的新对象,并将其推入“obj2”。
最后,将“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中文网其他相关文章!