我有两个包含对象的数组。我如何从第一个数组中删除第二个数组中已经存在的项目?
第一个数组:
var s = [
{"Name": "1"},
{"Name": "2"},
{"Name": "3"},
{"Name": "4"},
{"Name": "5"},
{"Name": "6"}
]
第二个数组:
var t = [
{"Name": "1"},
{"Name": "2"},
{"Name": "3"},
{"Name": "8"}
]
预期输出:
[
{"Name": "4"},
{"Name": "5"},
{"Name": "6"}
]
答案 0 :(得分:1)
您可以将filter()
与some()
一起使用
var s = [{"Name":"1"},{"Name":"2"},{"Name":"3"},{"Name":"4"},{"Name":"5"},{"Name":"6"}];
var t = [{"Name":"1"},{"Name":"2"},{"Name":"3"},{"Name":"8"}];
result = s.filter(a => !t.some(b => a.Name === b.Name));
console.log(result);
答案 1 :(得分:0)
使用set和.filter方法的方法
var s=[
{
"Name": "1"
},
{
"Name": "2"
},
{
"Name": "3"
},
{
"Name": "4"
},
{
"Name": "5"
},
{
"Name": "6"
}
];
var t= [
{
"Name": "1"
},
{
"Name": "2"
},
{
"Name": "3"
},{
"Name": "8"
}
];
var set = new Set();
t.forEach(obj => set.add(obj.Name));
s=s.filter(obj => !set.has(obj.Name))
console.log(s);
答案 2 :(得分:0)
z = f(s, t);
function f(first, second) {
var z = [];
for (var i = 0; i < first.length; i++) {
var included = false;
for (let j = 0; j < second.length; j++) {
if(equal(first[i], second[j]))
included = true;
//break; //optional
}
if(!included)
z.push(first[i]);
}
return z;
}
function equal(a,b){
//however you define the objs to be equal
return a.Name == b.Name;
}