如何使用过滤器数组删除数组中的项目? [复制]

Posted

技术标签:

【中文标题】如何使用过滤器数组删除数组中的项目? [复制]【英文标题】:How to use filter array to remove items in array? [duplicate] 【发布时间】:2017-09-17 11:32:52 【问题描述】:

我有一个数组:

    var arr = [1,2,4,5,1,2,3,4,5];

我还有另一个数组:

    var removeArr = [1,3,5];

我希望它删除 arr 中具有 removeArr 的元素:

    var result = arr.filter(function(item)
                 return item != removeArr[???];
                 );

我尝试使用循环对其进行迭代,但它不起作用。

【问题讨论】:

检查其他数组是否包含该项 developer.mozilla.org/en-US/docs/Web/javascript/Reference/… 如果所有答案都相同,我该如何选择最佳答案? 【参考方案1】:

您可以使用Array#filter 以及Array#indexOf 函数达到所需的输出。

var arr = [1,2,4,5,1,2,3,4,5],
    removeArr = [1,3,5],
    result = arr.filter(function(item)
      return removeArr.indexOf(item) == -1;
    );
    
    console.log(result);

【讨论】:

【参考方案2】:

 var arr = [1,2,4,5,1,2,3,4,5];
 
 var removeArr = [1,3,5];
 
 var result = arr.filter(x => !removeArr.includes(x));
 
 console.log(result);

【讨论】:

【参考方案3】:

您可以使用Set 并在过滤时进行测试。

var array = [1, 2, 4, 5, 1, 2, 3, 4, 5],
    removeArray = [1, 3, 5],
    result = array.filter((s => a => !s.has(a))(new Set(removeArray)));
    
console.log(result);

【讨论】:

这是一个聪明的!花了一些时间来了解它是如何工作的,谢谢。 它在集合上使用闭包。 是的,我是在改写成常规的 IIFE 模板后才发现的。【参考方案4】:
var result = arr.filter(function(item)
    return removeArr.indexOf(item) === -1; // if the item is not included in removeArr, then return true (include it in the result array)
);

【讨论】:

【参考方案5】:

您可以通过检查项的索引是否不是-1来检查值是否在数组中。

var result = arr.filter(item => removeArr.indexOf(item) === -1)

【讨论】:

以上是关于如何使用过滤器数组删除数组中的项目? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在AngularJS中使用过滤器从数组中删除项目?

如何删除数组中的项目? [复制]

如何删除 mongodb 特定文档中的数组中的项目? [复制]

如何从数组中删除空值? [复制]

如何从javascript中的数组中删除单个实例? [复制]

如何删除数组中索引 X 处的项目? [复制]