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

在第一个结果处停止的JavaScript过滤器,javascript,arrays,list,Javascript,Arrays,List,JavaScript中是否有类似于filter的机制(无需编写自己的机制)。但是,它不会返回集合的所有筛选元素,而是只返回第一个元素。当然,我可以执行以下操作来获得第一个偶数: [7,5,3,2,1].filter(x => x % 2 == 0)[0] 但如果名单上还有1000万个数字,那就有很多不必要的工作了。在Haskell这样的语言中,由于懒惰的计算,其他1000万个数字不会被看到 JavaScript中是否有一种机制可以在第一个结果之后不计算任何元素而执行上述操作?您可以尝试:

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

[7,5,3,2,1].filter(x => x % 2 == 0)[0]
但如果名单上还有1000万个数字,那就有很多不必要的工作了。在Haskell这样的语言中,由于懒惰的计算,其他1000万个数字不会被看到

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

您可以尝试:

从文档中:

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

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

[7, 5, 3, 2, 1].find(isEvenNumber); //2

function isEvenNumber(elem) {
  return elem % 2 === 0;
}

如果您的示例包含第二个偶数,则会提供更多信息。
[7, 5, 3, 2, 1].find(isEvenNumber); //2

function isEvenNumber(elem) {
  return elem % 2 === 0;
}