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

TypeScript合并数组 保留arr1全部数据及arr2中number字段唯一记录的实现

实现方法

要满足「arr1全保留、arr2仅加入arr1不存在的number记录、arr1优先级最高」的需求,最优方案是基于Map做去重校验,整体时间复杂度为O(n+m)(n为arr1长度,m为arr2长度),性能远优于嵌套循环对比的方案。

实现代码

function mergeArrays(arr1, arr2) {
  // 用Map存储已存在的number,键为number值,值为对应记录
  const recordMap = new Map();
  // 先全量加入arr1,保证arr1优先级
  arr1.forEach(item => recordMap.set(item.number, item));
  // 遍历arr2,仅加入number不存在的记录
  arr2.forEach(item => {
    if (!recordMap.has(item.number)) {
      recordMap.set(item.number, item);
    }
  });
  // 转成数组返回
  return Array.from(recordMap.values());
}

// 测试示例数据
let arr1 = [
  {
    "number": "1234",
    "Name": "test",    
    "data": [
      { "qty": 0, "val": 1.11 },
      { "qty": 500, "val": 2.92 },
      { "qty": 1000, "val": 2.84 },
      { "qty": 1500, "val": 2.66 }
    ]
  },
  {
    "number": "6776",
    "Name": "test9",    
    "data": [
      { "qty": 0, "val": 2 },
      { "qty": 100, "val": 3 },
      { "qty": 200, "val": 4 },
      { "qty": 300, "val": 5 }
    ]
  }
]

let arr2 = [
  {
    "number": "1234",
    "Name": "test",    
    "data": [ { "qty": 0, "val": 1.11 } ]
  },
  {
    "number": "7896",
    "Name": "test4",    
    "data": [
      { "qty": 0, "val": 5.11 },
      { "qty": 500, "val": 6.92 },
      { "qty": 1000, "val": 3.84 },
      { "qty": 1500, "val": 1.66 }
    ]
  },
  {
    "number": "4567",
    "Name": "test2",    
    "data": [
      { "qty": 0, "val": 4.11 },
      { "qty": 500, "val": 9.92 },
      { "qty": 1000, "val": 5.84 },
      { "qty": 1500, "val": 7.66 }
    ]
  }
]

console.log(mergeArrays(arr1, arr2))

方案优势

  • 性能最优:哈希表的查找、插入操作都是O(1)时间复杂度,整体为线性遍历的时间消耗,数据量越大性能优势越明显
  • 逻辑清晰:先全量保留优先级高的arr1,再补充arr2的增量数据,完全符合需求规则
  • 兼容性好:Map是ES6标准特性,所有现代浏览器、Node.js环境都支持,不需要额外依赖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:15:04