如何按supplierName对数组的awardedCapacity求和并生成独立结果数组
实现思路
通过一次遍历完成同供应商配额的累加统计,再将统计结果转换为目标格式数组,时间复杂度为O(n),仅需遍历原数组一次。
完整代码
const bidsList = [ { supplierName:'A', awardedCapacity:5 }, { supplierName:'B', awardedCapacity:10 }, { supplierName:'A', awardedCapacity:5 }, { supplierName:'A', awardedCapacity:3 }, { supplierName:'B', awardedCapacity:5 }, { supplierName:'C', awardedCapacity:2 } ]; // 统计每个供应商的总配额 const countMap = bidsList.reduce((prev, curr) => { const name = curr.supplierName prev[name] = (prev[name] || 0) + curr.awardedCapacity return prev }, {}) // 转换为目标格式数组 const newArr = Object.entries(countMap).map(([supplierName, totalAwarded]) => ({ supplierName, totalAwarded }))
输出结果
[ { supplierName: 'A', totalAwarded: 13 }, { supplierName: 'B', totalAwarded: 15 }, { supplierName: 'C', totalAwarded: 2 } ]
补充说明
如果需要严格保留原数组中供应商首次出现的顺序,可以用Map代替普通对象作为统计容器,代码调整如下:
const countMap = bidsList.reduce((map, curr) => { const name = curr.supplierName map.set(name, (map.get(name) || 0) + curr.awardedCapacity return map }, new Map()) const newArr = Array.from(countMap, ([supplierName, totalAwarded]) => ({ supplierName, totalAwarded }))
内容的提问来源于stack exchange,提问作者user17190872
相关产品推荐
相关产品推荐

