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

合并两个对象数组并去重,统一id键名

合并不同键名的对象数组并去重

可以通过以下步骤实现需求:

  1. 收集已有标识:先把数组一中所有的id提取出来存入Set,利用Set的特性快速判断元素是否已存在
  2. 处理数组二元素:遍历数组二,将每个对象的levelId替换为id,同时过滤掉已在Set中的重复元素
  3. 数组合并:把处理后的新增元素和原数组一合并,得到最终结果

完整代码示例

// 原数组
const arr1 = [
   {id: 'ABC_123', value: 10, label: 'tree', level: 'mid'},
   {id: 'ABC_456', value: 11, label: 'grass', level: 'top'}
];

const arr2 = [
   {levelId: 'ABC_123', value: 10, label: 'tree', level: 'mid'},
   {levelId: 'ABC_456', value: 11, label: 'grass', level: 'top'},
   {levelId: 'ABC_789', value: 11, label: 'bush', level: 'low'}
];

// 收集arr1中已有的id
const existingIds = new Set(arr1.map(item => item.id));

// 处理arr2:转换键名并过滤重复元素
const newItemsFromArr2 = arr2
  .filter(item => !existingIds.has(item.levelId))
  .map(item => {
    // 解构重命名levelId为id,保留其他属性
    const { levelId: id, ...rest } = item;
    return { id, ...rest };
  });

// 合并得到最终数组
const result = [...arr1, ...newItemsFromArr2];

console.log(result);

输出结果

[
   {id: 'ABC_123', value: 10, label: 'tree', level: 'mid'},
   {id: 'ABC_456', value: 11, label: 'grass', level: 'top'},
   {id: 'ABC_789', value: 11, label: 'bush', level: 'low'}
]

这种方案的优势:

  • 用Set做存在性判断,时间复杂度为O(1),整体执行效率更高
  • 不修改原数组,返回全新结果,避免产生副作用
  • 逻辑拆分清晰,每一步都对应需求中的具体要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:42:34