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

如何用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);

逻辑说明

  1. 分组初始化:用对象group以id为键存储每个分组的信息,首次遇到某id时,初始化包含id、name,并将price和profit置为0。
  2. 数值累加:遍历输入数组时,对每个id对应的分组累加price和profit。
  3. 格式转换:通过Object.values()提取分组对象的所有值形成数组,再用map将price和profit转换为字符串,匹配期望输出的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:50:13