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

