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

如何合并含同名对象的二维列表并累加对应值生成新列表?

合并数组中同名对象的方法

假设你有如下结构的数组(以JavaScript为例):

const mergedArray = [
  { name: 'bananas', quantity: 2 },
  { name: 'apples', quantity: 3 },
  { name: 'bananas', quantity: 5 },
  { name: 'oranges', quantity: 1 },
  { name: 'apples', quantity: 4 }
];

要合并name相同的对象,累加quantity值并保留单个对象,可以用Array.reduce()配合临时对象实现:

const result = Object.values(
  mergedArray.reduce((acc, item) => {
    // 检查当前name是否已在累加器中
    if (acc[item.name]) {
      // 合并值(这里以累加quantity为例)
      acc[item.name].quantity += item.quantity;
      // 如果有其他属性需要合并,比如price,可以按需处理:
      // acc[item.name].totalPrice += item.price * item.quantity;
    } else {
      // 不存在则添加新对象到累加器
      acc[item.name] = { ...item };
    }
    return acc;
  }, {})
);

console.log(result);
// 输出:
// [
//   { name: 'bananas', quantity: 7 },
//   { name: 'apples', quantity: 7 },
//   { name: 'oranges', quantity: 1 }
// ]

核心逻辑说明

  1. reduce遍历数组:用累加器(acc)作为临时存储,键是对象的name,值是合并后的对象。
  2. 判断并合并:如果当前name已存在,就更新对应属性的值;不存在则将当前对象的副本存入累加器。
  3. 转成数组:用Object.values()把临时对象的所有值提取出来,得到最终的合并数组。

扩展场景:多属性合并

如果对象有多个需要合并的属性,比如同时累加quantity和totalWeight,可以修改合并逻辑:

const mergedArray = [
  { name: 'bananas', quantity: 2, totalWeight: 0.8 },
  { name: 'bananas', quantity: 5, totalWeight: 2.0 }
];

const result = Object.values(
  mergedArray.reduce((acc, item) => {
    if (acc[item.name]) {
      acc[item.name].quantity += item.quantity;
      acc[item.name].totalWeight += item.totalWeight;
    } else {
      acc[item.name] = { ...item };
    }
    return acc;
  }, {})
);
// 结果:{ name: 'bananas', quantity: 7, totalWeight: 2.8 }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:30:48