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
相关产品推荐
相关产品推荐

