【问题标题】: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[???];
                 });

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

【问题讨论】:

标签: javascript arrays


【解决方案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)

        【讨论】:

          猜你喜欢
          • 2014-07-11
          • 2020-02-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-20
          • 1970-01-01
          • 2020-07-17
          • 2011-04-26
          相关资源
          最近更新 更多