JavaScript实现按唯一ID将数组元素前置合并对象数组
解决数组去重并前置合并的问题
你可以通过以下步骤实现需求,避免ID重复的同时将arr2中符合条件的元素前置到arr1:
提取arr1的ID集合
先把arr1里所有对象的id提取出来存到Set中,这样后续判断ID是否存在时效率更高:const arr1Ids = new Set(arr1.map(item => item.id));过滤arr2中的重复元素
筛选出arr2里id不在arr1中的对象:const uniqueArr2Items = arr2.filter(item => !arr1Ids.has(item.id));合并数组
将过滤后的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
相关产品推荐
相关产品推荐

