JavaScript中是否存在类似于filter
的机制(无需编写自己的机制)。而不是返回集合的所有过滤元素,它只返回第一个。当然,我可以通过以下方式获得第一个偶数:
[7,5,3,2,1].filter(x => x % 2 == 0)[0]
但是如果该列表中有1000万个数字,那么就会有很多不必要的工作。在像Haskell这样的语言中,由于懒惰的评估,其他1000万个数字都不会被查看。
在第一个结果之后,是否有一种机制可以在不评估任何元素的情况下执行上述操作?
答案 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()方法!