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

Javascript 如果对象包含在另一个数组中,则从数组中删除该对象,javascript,ecmascript-6,Javascript,Ecmascript 6,我试图从数组中删除一个对象,如果该对象的属性(唯一)包含在另一个数组中。我知道我可以做这样的嵌套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 }

我试图从数组中删除一个对象,如果该对象的属性(唯一)包含在另一个数组中。我知道我可以做这样的嵌套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
        }
    }
}
for(i=0;i

或者别的什么。差不多吧。有ES6过滤器吗?我可以很容易地对带有字符串的常规数组进行筛选,但是对对象数组进行筛选要复杂一些。

不是很理想,但是试试这个

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;
});
试试这个……)

splice()可以删除数组中的元素。你需要通过巫婆元素。witch元素是delete的开始。应该删除多少个元素。那是1:)

您可以在ES6中使用


如果您可以使用ES6,您甚至可以查看
array.find
array.filter
array.some

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

编写函数、传递参数并简单地收集输出如何

函数arrnotinarkey(arr1、arr2、键){
对于(变量i=0;i
您可以使用shift功能。这是一个例子。
http://www.w3schools.com/js/tryit.asp?filename=tryjs_array_shift
对于(i=0;i
您能否共享样本阵列?ES6过滤器?你的意思是?@Rajesh对象有一个“Email”属性。应该没问题。您是想删除密钥、删除值/引用还是从内存中删除值?@evolutionxbox ECMAScript可能就是我应该称之为的。我还没弄清楚区别。是的,这很有效。谢谢不过,这是最好的办法吗?我假设最快的是O(n^2)?@Snorlax最快的方法是索引两个数组中唯一的电子邮件ID,然后逐个匹配每个项目。在这种情况下,复杂性将是O(2n)是的。对于<10个项目,这应该足够快。@Snorax对于少于10个项目,应该不会有任何问题。我建议您使用
array.findIndex
array.find
array.some
。我们不需要找到所有元素,应该在第一次匹配时中断。。不。那不是我想要的。看起来我的打字脚本验证对Set不满意。。嗯,es6!==打字稿,我从没说过是这样。
if(array[i].Email === array2[j].Email){
   // splice(Index you want to remove,to witch element)
   array1.splice(i,1);
}
var array = [/* your data */],
    array2 = [/* your data */],
    set = new Set(...array2.map(a => a.Email));

array = array.filter(a => !set.has(a.Email));
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);
        }
    }
}