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

JavaScript按键合并对象并累加值的实现方法

合并数组中同键对象并累加对应值的实现方案

嘿,这个需求用reduce就能完美解决,其实你之前用它做计数的思路,稍微扩展一下就能适配这个场景啦!

核心思路

我们可以借助reduce创建一个临时的累加对象,以type作为唯一标识键:

  • 遍历原数组时,如果当前对象的type已经在累加对象里,就把它的itemCount加到已有值上;
  • 如果是第一次遇到这个type,就把当前对象存入累加对象;
  • 最后把累加对象的所有值提取出来转成数组,就是我们想要的结果。

代码实现

const arr = [ 
  {type: "2 shlf cart", itemCount: 4}, 
  {type: "2 shlf cart", itemCount: 4}, 
  {type: "5 shlf cart", itemCount: 10} 
];

const mergedArr = Object.values(arr.reduce((acc, curr) => {
  // 检查当前type是否已存在于累加器中
  if (acc[curr.type]) {
    // 累加itemCount数值
    acc[curr.type].itemCount += curr.itemCount;
  } else {
    // 首次出现该type,存入累加器(用扩展运算符避免修改原对象)
    acc[curr.type] = {...curr};
  }
  return acc;
}, {}));

console.log(mergedArr);
// 输出结果:
// [ {type: "2 shlf cart", itemCount: 8}, {type: "5 shlf cart", itemCount: 10} ]

扩展说明

如果你的对象还有其他需要累加的数值属性(比如totalPrice),只需扩展累加逻辑即可:

acc[curr.type].itemCount += curr.itemCount;
acc[curr.type].totalPrice += curr.totalPrice;

这样就能同时处理多个属性的累加了。

另外,Object.values()的作用是把reduce返回的「以type为键的对象」,提取出所有值组成数组,正好匹配我们期望的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:50:48