如何在JavaScript/Node.js中合并数组对象并累加属性值?
解决方案:合并数组对象并对相同键值求和
当然可以实现这个需求!不管你的数组长度怎么变化,我们都可以用JavaScript的Array.reduce()方法轻松完成——它天生就适合这种需要累加/合并的场景。
具体实现代码
这里直接给出可运行的代码,完全匹配你想要的输出:
// 你的输入数组(长度不固定也没关系) const inputArray = [ { JavaScript: 41837, Batchfile: 47 }, { 'C#': 7484 }, { Batchfile: 110 }, { Scala: 50597 }, { Java: 18180 }, { Java: 55689 } ]; // 核心合并逻辑 const mergedResult = inputArray.reduce((accumulator, currentObj) => { // 遍历当前对象的每一组键值对 for (const [key, value] of Object.entries(currentObj)) { // 如果累加器里已经有这个键,就把值相加;没有的话直接赋值(0 + 当前值) accumulator[key] = (accumulator[key] || 0) + value; } return accumulator; }, {}); // 初始值设为空对象,作为累加的起点 console.log(mergedResult); // 输出结果:{ JavaScript: 41837, Batchfile: 157, 'C#': 7484, Scala: 50597, Java: 73869 }
代码逻辑说明
reduce()的作用:它会遍历数组的每一个元素,把每次处理的结果累加到accumulator(累加器)里,最后返回这个累加器。- 遍历对象键值对:用
Object.entries(currentObj)把当前对象转换成键值对数组,方便逐个处理。 - 求和逻辑:
(accumulator[key] || 0)是为了处理“键第一次出现”的情况——如果键不存在,accumulator[key]是undefined,|| 0会把它转换成0,再加上当前值就得到正确的初始值;如果键已经存在,就直接加上新值。
这个方法完全适配任意长度的输入数组,只要数组里的元素是包含数字值的键值对对象,都能正确合并求和。
内容的提问来源于stack exchange,提问作者Lukasz Dabrowski
相关产品推荐
相关产品推荐

