我试图从数组中删除一个对象,如果该对象的属性(唯一)包含在另一个数组中。我知道我可以像这样做一个嵌套的for循环:
for(i = 0; i < array.length; i++) {
for(j = 0; j < array2.length; j++) {
if(array[i].Email === array2[j].Email) {
//remove array[i] object from the array
}
}
}
或者其他什么。这样的事情。那有ES6过滤器吗?我可以轻松地对带有字符串的常规数组进行过滤,但是使用对象数组进行过滤会有点棘手。
答案 0 :(得分:6)
如果您使用ES6很好,甚至可以查看array.find
,array.filter
或array.some
var result = array.filter(x=>{
return array2.findindex(t=> t.Email === x.Email) === -1
})
var result = array.filter(x=>{
return !array2.some(t=> t.Email === x.Email)
})
答案 1 :(得分:2)
不是最优,但试试这个
array = array.filter( function( item ){
return array2.filter( function( item2 ){
return item.Email == item2.Email;
}).length == 0;
});
尝试使用find
,它不会迭代所有元素,并会在首次匹配后中断
array = array.filter( function( item ){
return array2.find( function( item2 ){
return item.Email == item2.Email;
}) == undefined;
});
答案 2 :(得分:2)
您可以使用Set
与ES6
var array = [/* your data */],
array2 = [/* your data */],
set = new Set(...array2.map(a => a.Email));
array = array.filter(a => !set.has(a.Email));
答案 3 :(得分:-1)
试试这个.... :)
if(array[i].Email === array2[j].Email){
// splice(Index you want to remove,to witch element)
array1.splice(i,1);
}
splice()可以删除数组的元素。你需要传递巫婆元素。巫婆元素是删除的开始。应删除多少个元素。那是1 .. :)
答案 4 :(得分:-1)
如何编写函数,传递参数并简单地收集输出?
function arrNotInArrKey(arr1, arr2, key) {
for (var i = 0; i < arr1.length; i++) {
for (var j = 0; j < arr2.length; j++) {
if (arr1[i][key] === arr2[j][key]) {
arr1.splice(i, 1);
i--;
}
}
}
return arr1;
}
console.log(
arrNotInArrKey([{
name: 1
}, {
name: 3
}, {
name: 2
}], [{
name: 2
}], "name")
);
&#13;
答案 5 :(得分:-1)
You can use shift function. here it's example.
http://www.w3schools.com/js/tryit.asp?filename=tryjs_array_shift
for(i = 0; i < array.length; i++) {
for(j = 0; j < array2.length; j++) {
if(array[i].Email === array2[j].Email) {
array.shift(array[i].Email);
}
}
}