Array.find vs Array.forEach性能

问题描述 投票:-5回答:3

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

有人在find和forEach之间进行了性能比较吗?

javascript
3个回答
1
投票

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

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

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

在性能上,它们都为O(n),尽管find可能循环较少的循环,因此在这方面会表现得更好。


1
投票

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

是的,它将。从spec中可以很清楚地看到,一旦回调返回真实值,它就立即开始计时。步骤6(d):

如果testResult为真,则返回kValue

[引擎[和其他]效率低下。)

0
投票
如您在here中看到的源代码,您会注意到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
© www.soinside.com 2019 - 2024. All rights reserved.