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

如何合并JavaScript对象中asset_id和event_code重复项的value值

JavaScript 合并相同asset_id和event_code的对象并累加value

你的现有代码仅对比相邻元素的asset_id和event_code,但相同组合的对象可能并非连续排列(比如示例中第一个和最后一个对象都是ABC+1),因此无法正确合并所有符合条件的对象,导致结果不符合预期。

正确实现方式

使用临时对象做映射,将asset_id与event_code的组合作为唯一键,遍历数组时累加对应组合的value,最后将映射转为目标数组:

const transaction = [{
    value: 5,
    asset_id: 'ABC',
    event_code : 1
}, {
    value: 15,
    asset_id: 'HGF',
    event_code : 1
}, {
    value: 15,
    asset_id: 'XYZ',
    event_code : 2
}, {
    value: 20,
    asset_id: 'XYZ',
    event_code : 2
}, {
    value: 25,
    asset_id: 'DEF',
    event_code : 3
}, {
    value: 20,
    asset_id: 'HGF',
    event_code : 3
}, {
    value: 20,
    asset_id: 'HGF',
    event_code : 3
},
{
    value: 10,
    asset_id: 'ABC',
    event_code : 1
}];

const map = {};

transaction.forEach(item => {
    const key = `${item.asset_id}-${item.event_code}`;
    if (map[key]) {
        map[key].value += item.value;
    } else {
        map[key] = {...item};
    }
});

const newArr = Object.values(map);

console.log(newArr);

代码说明

  1. 生成唯一键:通过${item.asset_id}-${item.event_code}创建唯一标识,确保每个asset_id+event_code组合对应唯一的映射键。
  2. 累加value:遍历数组时,若键已存在则累加value;若不存在则浅拷贝原对象存入映射(避免修改原数组数据)。
  3. 转换为数组:使用Object.values(map)提取映射中的所有值,得到合并后的结果数组。

执行后输出与期望结果一致:

[{
   value: 15,
   asset_id: 'ABC',
   event_code: 1
}, {
   value: 15,
   asset_id: 'HGF',
   event_code: 1
}, {
   value: 35,
   asset_id: 'XYZ',
   event_code: 2
}, {
   value: 25,
   asset_id: 'DEF',
   event_code: 3
}, {
   value: 40,
   asset_id: 'HGF',
   event_code: 3
}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:25:24