繁体   English   中英

如果对象包含在另一个数组中,则从数组中删除它

[英]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.findarray.filterarray.some

Array.findIndex

var result = array.filter(x=>{
  return array2.findindex(t=> t.Email === x.Email) === -1
})

Array.some

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM