Array.find vs Array.forEach 在性能上



我想知道是否有人知道 Array.find 是否会在找到第一项时短路循环。 我在谷歌上找不到任何内容。

有没有人在find和forEach之间进行任何性能比较?

find(( 方法返回所提供数组中满足所提供测试函数的第一个元素的值。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find

Array.find将返回与回调条件匹配的第一个结果。

性能方面,它们都是 O(n(,尽管find可能会循环通过更少的循环,因此在这方面性能会更高。

我想知道是否有人知道 Array.find 是否会在找到第一项时短路循环。

是的,会的。这从规范中可以清楚地看出,该规范显示一旦回调返回真实值,它就会被释放。步骤6(d(:

如果testResult为真,则返回kValue

(另外,即使找到了结果,继续搜索也会很奇怪。如果有早期的规范语言这样做,那么在最终确定之前就会被捕获并纠正,并且/或被JavaScript引擎的制造商[和其他人]质疑为效率低下。

正如您在此处看到的 polyfill 代码,您可以注意到find循环,直到是否有匹配的项目。

这是其中的一部分;

// 6. Repeat, while k < len
while (k < len) {
// a. Let Pk be ! ToString(k).
// b. Let kValue be ? Get(O, Pk).
// c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
// d. If testResult is true, return kValue.
var kValue = o[k];
if (predicate.call(thisArg, kValue, k, o)) {
return kValue;
}
// e. Increase k by 1.
k++;
}

所以,∀ n ∈ [0, len - 1]: n <= len - 1

最新更新