Javascript如何实现对象数组中相同id对应的value值求和
实现方法
你可以通过「先统计累加、再转换格式」的逻辑实现需求,以下是两种常用的实现方案:
方案1:使用reduce+普通对象统计(写法最简洁)
const obj = [{id:1,value:2},{id:1,value:3},{id:2,value:8}]; // 统计每个id对应的value总和 const sumRecord = obj.reduce((acc, current) => { acc[current.id] = (acc[current.id] || 0) + current.value; return acc; }, {}); // 转换为要求的数组格式 const result = Object.entries(sumRecord).map(([id, totalValue]) => ({ id: Number(id), // 把Object.keys默认返回的字符串转为数字,保持和原id类型一致 value: totalValue })); // 输出结果:[{id: 1, value: 5}, {id: 2, value: 8}] console.log(result);
方案2:使用Map统计(支持任意类型id)
如果你的id存在非数字/字符串的特殊类型(比如Symbol、对象等),更推荐用Map实现,不需要额外做类型转换:
const obj = [{id:1,value:2},{id:1,value:3},{id:2,value:8}]; const sumMap = new Map(); // 累加统计 obj.forEach(item => { sumMap.set(item.id, (sumMap.get(item.id) || 0) + item.value); }); // 直接转为目标数组 const result = Array.from(sumMap, ([id, value]) => ({id, value}));
内容的提问来源于stack exchange,提问作者miouri
相关产品推荐
相关产品推荐

