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

如何在Node.js中合并数组重复项并汇总数量生成新数组?

解决Node.js中发票产品数组重复项合并、汇总quantity的问题

你可以使用Array.reduce()方法高效实现重复产品的合并与quantity汇总,这比forEach更适配这类聚合场景。以下是具体实现:

代码示例

const products = [
  { quantity: 1, description: 'Node Training Package', 'tax-rate': -40.5, price: 20 },
  { quantity: 1, description: 'Node Training Package', 'tax-rate': -40.5, price: 20 },
  { quantity: 1, description: 'Angular crash course', 'tax-rate': -40.5, price: 35 },
  { quantity: 1, description: 'Node Training Package', 'tax-rate': -40.5, price: 20 },
  { quantity: 1, description: 'Angular crash course', 'tax-rate': -40.5, price: 35 },
  { quantity: 1, description: 'PHP Training', 'tax-rate': -40.5, price: 35 }
];

const mergedProducts = Object.values(
  products.reduce((acc, product) => {
    // 以description作为分组标识,若需更严格匹配,可拼接price、tax-rate等字段生成key
    const key = product.description;
    if (acc[key]) {
      // 已存在则累加quantity
      acc[key].quantity += product.quantity;
    } else {
      // 不存在则添加新条目,浅拷贝避免修改原数组引用
      acc[key] = { ...product };
    }
    return acc;
  }, {})
);

console.log(mergedProducts);

代码说明

  1. reduce聚合逻辑:通过reduce遍历原数组,以空对象作为初始累加器,集中处理分组与数量累加。
  2. 分组规则:用产品description作为分组key,若需区分同名但价格/税率不同的产品,可改用${product.description}-${product.price}-${product['tax-rate']}作为唯一key。
  3. 数量累加与条目创建:累加器中已有对应产品则直接加quantity,无对应产品则浅拷贝当前产品对象存入累加器。
  4. 转换为目标数组:用Object.values()提取累加器中的产品条目,得到最终合并后的数组。

为什么forEach易出错?

用forEach实现时,需手动维护分组对象,还要注意避免原数组对象引用被意外修改,稍不注意就会出现累加错误或数据污染,reduce则将聚合逻辑封装得更简洁可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:50:22