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

如何按_id去重并累加对象数组中的count值

按_id去重并累加count的最简实现步骤

核心思路

利用Map的键唯一性实现去重,遍历数组时累加相同_id对应的count值,最后将Map存储的对象转换为数组即可得到结果。


分步实现

1. 初始化空Map容器

用_id作为唯一键,存储去重后的对象:

const map = new Map();

2. 遍历原数组处理每个元素

循环遍历数组,判断当前对象的_id是否已存在于Map中:

data.forEach(item => {
  // 获取Map中对应_id的已有对象
  const existingItem = map.get(item._id);
  if (existingItem) {
    // 若已存在,直接累加count值
    existingItem.count += item.count;
  } else {
    // 若不存在,存入当前对象的浅拷贝(避免修改原数组数据)
    map.set(item._id, {...item});
  }
});

这里用{...item}做浅拷贝是为了隔离原数组和处理后的数据,如果你不需要保留原数组,直接存入item也可以。

3. 将Map转换为目标数组

通过Map.values()获取所有去重后的对象,再用Array.from()转成数组:

const result = Array.from(map.values());

完整可运行代码

const data = [
    {"_id": "63613c9d1298c1c70e4be684", "NameFood": "Coca", "count": 2},
    {"_id": "63621f10b61f259b13cafe8e", "NameFood": "Xa xi", "count": 2},
    {"_id": "63654bf94b61091ae9c4bfd3", "NameFood": "Cafe đen", "count": 2},
    {"count": 1, "_id": "63613c9d1298c1c70e4be684", "NameFood": "Coca"}
];

const map = new Map();
data.forEach(item => {
  const existing = map.get(item._id);
  if (existing) {
    existing.count += item.count;
  } else {
    map.set(item._id, {...item});
  }
});
const result = Array.from(map.values());

console.log(result);

内容的提问来源于stack exchange,提问作者Hoàng-mp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:31:01