如何用JavaScript实现数组对象按ID汇总价格与利润并输出指定格式
合并相同ID的对象并汇总价格与利润
问题说明
给定输入数组:
var input = [{id: 1, price: 1200, profit:60, name:'Messi'}, {id: 2, price: 600, profit:40, name:'Ronaldo'}, {id: 1, price: 100, profit:40, name:'Messi'}, {id: 1, price: 200, profit:30, name:'Messi'}, {id: 2, price: 400, profit:10, name:'Ronaldo'}, {id: 1, price: 800, profit:10, name:'Messi'}];
需要得到按id分组,汇总price和profit,同时保留name的输出数组:
[{id:1, name:'Messi', price:'2300', profit:'140'}, {id:2, name:'Ronaldo', price:'1000', profit:'50'}, ]
原尝试代码仅汇总了price,且输出为对象而非数组,需调整如下:
修改后的实现代码
// 按id分组存储中间数据 const group = {}; input.forEach(item => { // 初始化分组项:若当前id未存在,则创建包含基础信息的对象 if (!group[item.id]) { group[item.id] = { id: item.id, name: item.name, price: 0, profit: 0 }; } // 累加对应id的价格和利润 group[item.id].price += item.price; group[item.id].profit += item.profit; }); // 将分组对象转换为数组,并把数值转为字符串格式 const output = Object.values(group).map(item => ({ ...item, price: item.price.toString(), profit: item.profit.toString() })); console.log(output);
逻辑说明
- 分组初始化:用对象
group以id为键存储每个分组的信息,首次遇到某id时,初始化包含id、name,并将price和profit置为0。 - 数值累加:遍历输入数组时,对每个
id对应的分组累加price和profit。 - 格式转换:通过
Object.values()提取分组对象的所有值形成数组,再用map将price和profit转换为字符串,匹配期望输出的格式。
内容的提问来源于stack exchange,提问作者Mohammad Shohag
相关产品推荐
相关产品推荐

