Array.find vs Array.forEach性能

时间:2019-10-16 15:52:28

标签: javascript

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

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

3 个答案:

答案 0 :(得分:2)

  

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

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

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

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

答案 1 :(得分:2)

  

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

是的,它将。从spec可以清楚地看出,它显示了一旦回调返回真实值,它就会开始保卫。步骤6(d):

  

如果send exit为真,则返回testResult

(另外,即使已经找到结果,继续搜索也是很奇怪的。如果有早期的规范语言这样做,那么在最终确定和/或受到制造商的挑战之前,它会被捕获和更正。 JavaScript引擎[和其他]效率低下。)

答案 2 :(得分:1)

正如您在here中看到的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