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

如何对对象数组中相同键对应的值进行求和?

解决相同键值求和的数组转换问题

嘿,我来帮你搞定这个需求!你要把数组里相同键的所有值求和,然后转换成目标格式,其实用JavaScript的reduce方法就能很优雅地解决,当然用forEach也能实现,我给你详细说说两种方式:

方法一:使用reduce(推荐,更简洁高效)

reduce天生就是用来处理这种累加场景的,我们可以先把所有相同键的值累加到一个临时对象里,再把这个对象转换成你要的数组格式:

const originalArray = [ {1: 22}, {1: 56}, {2: 345}, {3: 23}, {2: 12} ];

// 第一步:累加相同键的值到临时对象
const sumMap = originalArray.reduce((accumulator, currentItem) => {
  // 获取当前对象的唯一键(因为每个子对象只有一个键)
  const key = Object.keys(currentItem)[0];
  const value = currentItem[key];
  
  // 累加值:如果键已存在就加当前值,否则初始化为当前值
  accumulator[key] = (accumulator[key] || 0) + value;
  return accumulator;
}, {}); // 初始累加器是一个空对象

// 第二步:把临时对象转换成目标数组格式
const resultArray = Object.entries(sumMap).map(([key, value]) => ({
  [key]: value // 用方括号实现动态键名
}));

console.log(resultArray); // 输出: [{1: 78}, {2: 357}, {3: 23}]

方法二:使用forEach(符合你之前尝试的思路)

如果你更习惯用forEach,逻辑其实和上面一致,只是用循环来手动累加:

const originalArray = [ {1: 22}, {1: 56}, {2: 345}, {3: 23}, {2: 12} ];
const sumMap = {};

// 遍历数组,累加相同键的值
originalArray.forEach(item => {
  const key = Object.keys(item)[0];
  const value = item[key];
  sumMap[key] = (sumMap[key] || 0) + value;
});

// 转换为目标数组
const resultArray = Object.entries(sumMap).map(([k, v]) => ({[k]: v}));

console.log(resultArray); // 同样得到目标结果

关键说明

  • 因为你的每个子对象都只有一个键值对,所以用Object.keys(item)[0]可以快速拿到对应的键;如果子对象可能有多个键,只需要调整遍历键的逻辑即可。
  • (sumMap[key] || 0)是为了处理第一次遇到某个键的情况,确保初始值是0,避免出现NaN。
  • Object.entries会把对象转换成[键, 值]的数组,再用map把每一组转成单个对象,就得到你要的格式了。

内容的提问来源于stack exchange,提问作者Parth Patel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:08:58