如何用JavaScript根据产品ID数组与价格数组生成总费用统计对象
生成唯一产品总费用的JavaScript最优方法
方法1:用forEach(贴合你已掌握的思路)
既然你已经能用forEach统计数量,只需要把计数逻辑改成价格累加就行:
const productIds = ["A", "A", "B", "A"]; const prices = [30, 50, 10, 40]; const totalCosts = {}; productIds.forEach((id, index) => { // 若对象中无该产品,先初始化为0 if (!totalCosts[id]) { totalCosts[id] = 0; } // 累加对应位置的价格 totalCosts[id] += prices[index]; }); console.log(totalCosts); // 输出: { A: 120, B: 10 }
方法2:用reduce(更简洁的最优写法)
reduce是JS中专门用来将数组归约为单个值的高阶函数,处理这类聚合问题非常合适,代码更紧凑:
const productIds = ["A", "A", "B", "A"]; const prices = [30, 50, 10, 40]; const totalCosts = productIds.reduce((acc, id, index) => { // 累加价格:若产品不存在则用0作为初始值 acc[id] = (acc[id] || 0) + prices[index]; return acc; }, {}); // 初始累加器是一个空对象 console.log(totalCosts); // 输出: { A: 120, B: 10 }
额外说明
- 两种方法的时间复杂度都是O(n)(n为数组长度),效率一致,但
reduce写法更符合JS的函数式编程风格,是处理此类场景的首选方案。 - 要保证两个数组的长度完全一致,否则会出现索引不匹配的问题。
内容的提问来源于stack exchange,提问作者Huack
相关产品推荐
相关产品推荐

