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

JavaScript实现按唯一ID将数组元素前置合并对象数组

解决数组去重并前置合并的问题

你可以通过以下步骤实现需求,避免ID重复的同时将arr2中符合条件的元素前置到arr1:

  1. 提取arr1的ID集合
    先把arr1里所有对象的id提取出来存到Set中,这样后续判断ID是否存在时效率更高:

    const arr1Ids = new Set(arr1.map(item => item.id));
    
  2. 过滤arr2中的重复元素
    筛选出arr2里id不在arr1中的对象:

    const uniqueArr2Items = arr2.filter(item => !arr1Ids.has(item.id));
    
  3. 合并数组
    将过滤后的arr2元素和原arr1拼接,过滤元素在前,原arr1在后,直接得到目标数组:

    arr1 = uniqueArr2Items.concat(arr1);
    

完整代码示例

var arr1 = [{
  "id": "id_1",
  "name": "Skoda"
}, {
  "id": "id_2",
  "name": "BMW"
}];

var arr2 = [{
  "id": "id_1",
  "name": "Skoda - Auto"
}, {
  "id": "id_3",
  "name": "BMW - Auto"
},{
  "id": "id_4",
  "name": "Merc - Auto"
}];

// 提取arr1的ID集合
const arr1Ids = new Set(arr1.map(item => item.id));
// 过滤arr2的重复元素
const uniqueArr2Items = arr2.filter(item => !arr1Ids.has(item.id));
// 合并数组
arr1 = uniqueArr2Items.concat(arr1);

console.log(arr1);
// 输出结果和你的期望完全一致

如果想要直接修改原arr1而不是生成新数组,也可以用扩展运算符配合unshift:

arr1.unshift(...uniqueArr2Items);

这样会直接把过滤后的元素添加到arr1的开头,效果和concat一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:57:17