如何使用reduce计算对象数组键累计和并输出等长累计结果数组
问题原因
- 你错误修改了reduce累加器的类型:初始累加器是数组,第一次迭代时直接将它赋值为单个对象,后续所有操作都基于对象执行,最终自然只能得到单个累计结果
- 没有存储每一步的累计值,只保留了最终的累计对象
修改后的实现代码
let arr = [{a: 1, b: 2}, {a: 2, b: 4}, {a: 8, b: -1}] // 写法1:用数组直接作为累加器,逻辑更简洁 let result = arr.reduce((acc, element) => { // 取上一步的累计结果,首次迭代取空对象兜底 const lastSum = acc.at(-1) || {} const currentSum = {} for (let key in element) { currentSum[key] = (lastSum[key] || 0) + element[key] } // 直接把当前步累计结果存入数组 acc.push(currentSum) return acc }, []) console.log(result) // 输出 [{a: 1, b: 2}, {a: 3, b: 6}, {a: 11, b: 5}]
注意事项
如果对象层级较深,需要把浅拷贝替换为深拷贝,避免引用类型的值出现联动修改的问题。
内容的提问来源于stack exchange,提问作者SavedByJESUS
相关产品推荐
相关产品推荐

