合并两个对象数组并去重,统一id键名
合并不同键名的对象数组并去重
可以通过以下步骤实现需求:
- 收集已有标识:先把数组一中所有的
id提取出来存入Set,利用Set的特性快速判断元素是否已存在 - 处理数组二元素:遍历数组二,将每个对象的
levelId替换为id,同时过滤掉已在Set中的重复元素 - 数组合并:把处理后的新增元素和原数组一合并,得到最终结果
完整代码示例
// 原数组 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
相关产品推荐
相关产品推荐

