【问题标题】:How to filter an array using two parameters?如何使用两个参数过滤数组?
【发布时间】:2020-05-13 15:44:18
【问题描述】:

我有一个程序可以将汽车添加或删除到名为pile 的数组中,以便以后可以根据过滤器和标准选择汽车。代码按原样工作,但我正在努力提高它对以后更改的效率。下面是显示我的问题的代码:

if ( var1 == true ) {
  pile.push(car1);
} else if ( var1 == false ) {
  pile = pile.filter( removeCar );
}

function removeCar(elem) {
  return String(elem[0][0]) !== 'Jeep';
}

我想做的是让removeCar() 有两个参数,所以它是removeCar(elem, make),这样如果make = 'Jeep',代码将以相同的方式运行。不幸的是,正如您所见,removeCarfilter 调用,没有参数,并且 elem 被自动分配给当前元素。

如何向.filter( removeCar) 添加参数?

【问题讨论】:

  • 有趣的是,您将true 分配给变量并且不对其进行检查。
  • 我认为这段代码行不通。 If(var1 = true) 将永远是真的,因为那是任务,你永远不会得到其他。同样在 else 中,您不需要再次测试它是否为假,因为如果它不是真的,那么假设它是布尔值当然是假的。现在您可以通过 pile = pile.filter( elem => removeCar(elem) ); 将值传递给函数
  • 是的,我只是没有正确复制该部分,因为它更复杂并且隐藏了关于过滤器部分的问题的含义。问题已解决。
  • 好的,很好,解决了。在 JS 中检查相等性时,尽管使用三个 === 总是好的,但这会起作用
  • @Nsoseka 从技术上讲,您首先给了我正确的答案,但作为评论,但 Dima 发布了正确答案作为答案,所以如果您添加评论作为答案,我会将其标记为解决方案但如果不是,我只会标记 Dimas

标签: javascript arrays filter


【解决方案1】:

如果您以不同的方式构造语句,则可以在过滤器中包含参数: pile = pile.filter( elem => removeCar(elem, make) );

【讨论】:

    【解决方案2】:
    pile = pile.filter( x => removeCar(x) );
    

    试试这个。如果removeCar(x)返回true,x(堆的当前元素)将被添加到新的堆数组中

    并且在你的 if/else 中必须是 '==' 或 '===' 而不是 '='

    【讨论】:

      【解决方案3】:

      这个怎么样:

      if (var1) pile.push(car1);
      pile = filterPile(pile, make);
      
      function filterPile(pile, make){
       if(!pile) pile;
       return pile.filter(val=> val[0][0].toString() !== make)
      } 
      

      【讨论】:

        【解决方案4】:

        你可以通过包装原生的Array filter()方法来定义自定义过滤函数:

        // A custom filter function which accepts a 'pile' and a 'make' parameter.
        function removeFromPileByMake(pile, make) {
            // Assuming every element holds an object at [0]
            return pile.filter(elem => elem[0][0] !== make);
        }
        
        var make = 'Jeep';
        
        if ( var1 ) {
            pile.push(car1);
        } else {
            pile = removeFromPileByMake(pile, make);
        }
        
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-09-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-11
          相关资源
          最近更新 更多