gpt4 book ai didi

javascript - 从对象数组中删除相同的值

转载 作者:行者123 更新时间:2023-12-01 15:50:35 27 4
gpt4 key购买 nike

我想通过比较 2 个数组从数组中删除相同的对象。

样本数据:

arr1 = [
{id: 1, name: "a"},
{id: 2, name: "b"},
{id: 3, name: "c"},
{id: 4, name: "d"},
];

arr2 = [
{id: 1, name: "a"},
{id: 4, name: "d"},
];

let newArray = []; // new array with with no same values it should be unique.
arr1.map((val, i)=>{
arr2.map((val2)=>{
if(val.id == val2.id){
console.log('Matched At: '+ i) // do nothing
}else{
newArray.push(val);
}
})
})
console.log(newArray); // e.g: [{id: 2, name: "b"}, {id: 3, name: "c"},];

最佳答案

Array.filter结合不 Array.some .

这里的诀窍也是不要some ,..

const arr1 = [
{id: 1, name: "a"},
{id: 2, name: "b"},
{id: 3, name: "c"},
{id: 4, name: "d"},
], arr2 = [
{id: 1, name: "a"},
{id: 4, name: "d"},
];

const newArray=arr1.filter(a=>!arr2.some(s=>s.id===a.id));

console.log(newArray);
.as-console-wrapper { max-height: 100% !important; top: 0; }


正如评论中提到的,这个问题的解释可能略有不同。如果您还想要来自 arr2 的 unqiue 项目,您基本上只需执行两次并加入。 IOW:检查 arr1 中不在 arr2 中的内容,然后检查 arr2 中不在 arr1 中的内容。

例如..
const notIn=(a,b)=>a.filter(f=>!b.some(s=>f.id===s.id));
const newArray=[...notIn(arr1, arr2), ...notIn(arr2, arr1)];

更新 2:
时间复杂度,正如 qiAlex 所提到的,循环中存在循环。虽然 some如果数据集变大,会在寻找匹配时短路,事情可能会变慢。这是 SetMap进来。

所以要使用 Set 来解决这个问题.
const notIn=(a,b)=>a.filter(a=>!b.has(a.id));
const newArray=[
...notIn(arr1, new Set(arr2.map(m=>m.id))),
...notIn(arr2, new Set(arr1.map(m=>m.id)))
];

关于javascript - 从对象数组中删除相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60708097/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com