在第一个结果处停止的JavaScript过滤器

时间:2017-01-20 01:53:52

标签: javascript arrays list

JavaScript中是否存在类似于filter的机制(无需编写自己的机制)。而不是返回集合的所有过滤元素,它只返回第一个。当然,我可以通过以下方式获得第一个偶数:

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

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

在第一个结果之后,是否有一种机制可以在不评估任何元素的情况下执行上述操作?

3 个答案:

答案 0 :(得分:18)

您可以尝试.find

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

来自文档:

  

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

简单基准

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
*/

答案 1 :(得分:2)

我认为[7, 5, 3, 2, 1].find(isEvenNumber); //2 function isEvenNumber(elem) { return elem % 2 === 0; } 完成了这一点 - 它将检索数组中符合特定条件的第一个元素:

eval()

答案 2 :(得分:0)

解决方案是使用.find()

注意:IE 11(及更早版本)不支持find()方法!