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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:50:27