如何按_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
相关产品推荐
相关产品推荐

