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

JavaScript如何去除数组重复对象并累加重复项的quantity数值

问题原因

你当前的代码仅在name首次出现时将条目推入结果数组,后续遇到重复name时无任何处理,因此无法实现数量累加。

方案1 基于你现有代码修改

保留你原本的Set写法,仅补充重复条目时的累加逻辑:

const setObj = new Set()
const result = list.reduce((acc, item) => {
  if (!setObj.has(item.name)) {
    setObj.add(item.name)
    acc.push({ name: item.name, quantity: item.quantity })
  } else {
    // 匹配结果数组中已存在的同name条目,累加数量
    const existedItem = acc.find(entry => entry.name === item.name)
    existedItem.quantity += item.quantity
  }
  return acc
}, [])

方案2 更高效的聚合写法(推荐)

无需额外维护Set,用Map做中间聚合,时间复杂度更低,不需要每次遍历查找匹配条目:

// 第一步:累加所有同name的quantity存入Map
const quantityMap = list.reduce((map, item) => {
  map.set(item.name, (map.get(item.name) || 0) + item.quantity)
  return map
}, new Map())

// 第二步:将Map转换为你需要的数组格式
const newList = Array.from(quantityMap, ([name, quantity]) => ({ name, quantity }))

上述代码运行后得到的newList就和你期望的输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 16:06:03