【问题标题】:JavaScript filter that stops at the first result在第一个结果处停止的 JavaScript 过滤器
【发布时间】:2017-06-04 22:08:07
【问题描述】:

JavaScript 中是否有类似于filter 的机制(无需我自己编写)。但是,它不会返回集合的所有过滤元素,而是仅返回第一个元素。当然,我可以执行以下操作来获得第一个偶数:

[7,5,3,2,1].filter(x => x % 2 == 0)[0]

但是,如果该列表中还有 1000 万个数字,就会有很多不必要的工作。在像 Haskell 这样的语言中,由于惰性求值,其他 1000 万个数字不会被查看。

JavaScript 中是否有一种机制可以在第一个结果之后不评估任何元素来执行上述操作?

【问题讨论】:

    标签: javascript arrays list


    【解决方案1】:

    你可以试试.find:

    [7,5,3,2,1].find(x => x % 2 == 0);
    // result: 2
    

    来自docs

    find() 方法返回数组中第一个元素的值 满足提供的测试功能。否则 undefined 是 返回。

    简单的基准测试

    var arr = [...Array(10000)].map( (item, idx) => idx )
    
    arr.filter(i => i == 3000)[0]
    arr.find(i => i == 3000)
    
    /*
      arr.filter x 1,358 ops/sec ±0.40% (91 runs sampled)
      arr.find x 23,743 ops/sec ±0.40% (90 runs sampled)
      Fastest is arr.find
    */
    

    【讨论】:

      【解决方案2】:

      我认为Array.prototype.find() 实现了这一点——它将检索数组中符合特定条件的第一个元素:

      [7, 5, 3, 2, 1].find(isEvenNumber); //2
      
      function isEvenNumber(elem) {
        return elem % 2 === 0;
      }
      

      【讨论】:

      • 如果包含第二个偶数,您的示例将提供更多信息。
      猜你喜欢
      • 1970-01-01
      • 2017-03-02
      • 2018-08-30
      • 1970-01-01
      • 2023-02-20
      • 1970-01-01
      • 1970-01-01
      • 2020-10-07
      • 2012-01-16
      相关资源
      最近更新 更多