You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:06:07