【问题标题】:What is the shortest way to write a condition for filter?为过滤器编写条件的最短方法是什么?
【发布时间】:2018-03-07 08:39:12
【问题描述】:

为 javascript filter 方法编写条件的最短方法是什么?

我知道这样:array.filter(elem => elem > 2); 但我知道即使不指定 elem 参数,你也可以这样写。

array.filter($1 > 2) 之类的。

【问题讨论】:

  • 视情况而定,最短是什么意思?字节方式,或者只是一个内置回调,比如Number?
  • 我的意思是“array.filter($1 > 2)”。我在哪里见过。
  • 我感觉人们对问题投反对票是因为他们无法回答或没有答案。 “不”仍然是一个答案。
  • @NicholasKyriakides 我觉得这应该发布在 stackexchange 代码高尔夫上。这里没有真正的编码问题
  • 我猜 OP 意味着简洁,而不是不可读。当然,两者之间的界限可能是主观的。

标签: javascript arrays filter ecmascript-6 higher-order-functions


【解决方案1】:

array.filter(c) 可能是过滤器的最小条件。

这里c 是一个命名函数,它将作为过滤器的回调。

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

c = e => e > 2;

var x = array.filter(c);

console.log(x);

【讨论】:

  • 老实说,如果c 将被重用,那么这是有道理的。否则我更喜欢 OP 的代码。此外,虽然是固执己见的评论,但过于简洁会破坏可读性。
  • @Rajesh 我同意你的看法。但问题的重点是让回调更短..
【解决方案2】:

尝试一行代码,最短的应该是:

array.filter(e => e > 2);

filter() 方法

var newArray = arr.filter(callback[, thisArg])

需要一个回调函数。这是定义测试函数的最短方式。

注意:在swift 代码中,有一种方法可以通过简单的表达式来实现:

array.filter { $0 > 2 }

【讨论】:

    【解决方案3】:

    最短的应该是

    array.filter(c); // c for "condition"
    

    这需要你在别处定义一个方法c

    function c(elem){
       return elem > 2;
    }
    // or var c = elem => elem > 2
    

    【讨论】:

      【解决方案4】:

      最简单的方法是将您的函数存储在一个变量中并将其传递给filter

      const greaterThan2 = x =>
          x > 2
      
      arrays.filter(greaterThan2)
      

      只有较短的版本有更多的好处:

      • 更容易测试
      • 可重复使用
      • 可读

      不止一个参数

      如果你有一个函数需要多个参数,你可以currying 它。再次以greater 为例:

      var numbers = [1, 2, 3, 4, 5]
      
      const greater = b => a =>
        a > b
      
      console.log(
        numbers.filter(greater(2))
      )

      为了让代码更通俗易懂,您可以将equal 分配给greaterThan2 = equal(2) 等变量

      var numbers = [1, 2, 3, 4, 5]
      
      const greater = b => a =>
        a > b
      
      const greaterThan2 = 
        greater(2)
      
      console.log(
        numbers.filter(greaterThan2)
      )

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-28
        • 2010-09-23
        • 2017-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多