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