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

如何对数组中同ID对象的Qty属性值进行求和合并?

嘿,这问题不难解决!我们可以用JavaScript的数组方法结合Map来高效处理每个coords分组下的items,实现相同ID的qty累加合并。直接上代码和说明:

解决方案

以下是完整的实现代码,逻辑清晰且不会修改原数组:

var COLLECTION = [
  {
    "coords":[1335,2525],
    "items":[
      {id: "boletus",qty: 1},
      {id: "lepiota",qty: 3},
      {id: "boletus",qty: 2},
      {id: "lepiota",qty: 4},
      {id: "carbonite",qty: 4},
    ],
  },
  {
    "coords":[1532,2889],
    "items":[
      {id: "boletus",qty: 2},
      {id: "lepiota",qty: 6},
      {id: "boletus",qty: 1},
      {id: "lepiota",qty: 4},
      {id: "chamomile",qty: 4},
    ],
  }
];

// 核心处理函数
const mergeItemsByQty = (collection) => {
  return collection.map(group => {
    // 用Map统计每个ID的总数量,键为ID,值为累加后的qty
    const qtyCounter = new Map();
    
    group.items.forEach(item => {
      if (qtyCounter.has(item.id)) {
        qtyCounter.set(item.id, qtyCounter.get(item.id) + item.qty);
      } else {
        qtyCounter.set(item.id, item.qty);
      }
    });

    // 把Map转换回目标格式的数组
    const mergedItems = Array.from(qtyCounter, ([id, qty]) => ({ id, qty }));

    // 返回新的分组对象,保留原coords,替换为合并后的items
    return { ...group, items: mergedItems };
  });
};

// 执行处理并输出结果
const mergedCOLLECTION = mergeItemsByQty(COLLECTION);
console.log(mergedCOLLECTION);

代码逻辑拆解

  • 遍历分组:用Array.map()遍历每个coords分组,这样会返回新数组,不会污染原数据。
  • 统计数量:使用Map来存储每个ID对应的总qty——Map在处理字符串键时比普通对象更稳妥(比如ID包含特殊字符的场景),语义也更明确。遍历items时,若ID已存在就累加qty,不存在则初始化。
  • 转换格式:用Array.from()把Map直接转换成我们需要的{id, qty}结构数组。
  • 保留原属性:用扩展运算符...group保留原分组的coords属性,只替换掉items为合并后的结果。

预期输出

执行后你会得到如下结构的数组:

var COLLECTION = [
  {
    "coords":[1335,2525],
    "items":[
      {id: "boletus",qty: 3},
      {id: "lepiota",qty: 7},
      {id: "carbonite",qty: 4}
    ]
  },
  {
    "coords":[1532,2889],
    "items":[
      {id: "boletus",qty: 3},
      {id: "lepiota",qty: 10},
      {id: "chamomile",qty: 4}
    ]
  }
];

这种方法的时间复杂度是O(n)(n为所有items的总数),效率很高,而且逻辑易懂,后续维护也方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:39:30