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

如何高效合并不同长度的对象数组并按ID合并重复项

高效合并两个对象数组(按ID累加value)

现有两个对象数组:

const arr1 = [
    {id:1, value:25},
    {id:2, value:15},
    {id:3, value:35}
];

const arr2 = [
    {id:3, value:95},
    {id:4, value:65}
];

需要生成第三个数组,要求包含所有唯一ID的对象;ID重复时,保留ID并将对应value值相加,最终结果如下:

const arr3 = [
    {id:1, value:25},
    {id:2, value:15},
    {id:3, value:130},
    {id:4, value:65},
];

最高效的实现方式是利用Map数据结构,因为Map的查找、插入操作时间复杂度都是O(1),整体时间复杂度为O(n + m)(n和m分别是两个数组的长度),远优于双重循环的O(n*m)。

具体实现代码

function mergeArrays(arr1, arr2) {
    const valueMap = new Map();

    // 处理第一个数组
    arr1.forEach(item => {
        valueMap.set(item.id, (valueMap.get(item.id) || 0) + item.value);
    });

    // 处理第二个数组
    arr2.forEach(item => {
        valueMap.set(item.id, (valueMap.get(item.id) || 0) + item.value);
    });

    // 将Map转换为目标数组
    return Array.from(valueMap, ([id, value]) => ({ id, value }));
}

// 调用示例
const arr1 = [
    {id:1, value:25},
    {id:2, value:15},
    {id:3, value:35}
];

const arr2 = [
    {id:3, value:95},
    {id:4, value:65}
];

const arr3 = mergeArrays(arr1, arr2);
console.log(arr3);
// 输出:[{id:1, value:25}, {id:2, value:15}, {id:3, value:130}, {id:4, value:65}]

代码说明

  1. 用Map存储每个ID对应的value总和,避免重复遍历查找
  2. 遍历两个数组时,通过valueMap.get(item.id) || 0处理ID首次出现的情况,简化判断逻辑
  3. 最后用Array.from将Map的键值对直接转换为目标格式的对象数组,简洁高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:55:33