[英]Remove object from array if it is contained in another array
我试图从数组中删除一个对象,如果该对象的属性(唯一)包含在另一个数组中。 我知道我可以像这样做一个嵌套的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过滤器吗? 我可以轻松地对带有字符串的常规数组进行过滤,但使用对象数组进行过滤则有点棘手。
如果你使用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)
})
不是最优,但试试这个
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;
});
您可以使用带有ES6的Set
var array = [/* your data */],
array2 = [/* your data */],
set = new Set(...array2.map(a => a.Email));
array = array.filter(a => !set.has(a.Email));
试试这个...... :)
if(array[i].Email === array2[j].Email){
// splice(Index you want to remove,to witch element)
array1.splice(i,1);
}
splice()可以删除数组的元素。 你需要传递巫婆元素。 巫婆元素是删除的开始。 应删除多少个元素。 那是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") );
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);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.