Array.indexOf如何比Array.some更有效

时间:2016-08-17 21:53:51

标签: javascript arrays performance

这个问题的灵感来自于这个问题的竞争答案:indexOf with multiple arguments

用户想知道一种有效的方法来测试数组中是否存在数组中给出的一个或多个整数。具体来说,给定一个数组和数字123124125,如何判断给定数组中是否存在一个或多个这些整数。提出了两种解决方案:

使用indexOf()

var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var exists = array.indexOf(123) !== -1 || array.indexOf(124) !== -1 || array.indexOf(125) !== -1;

或者,使用some()

var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var exists = array.some(function(item) {
  return item === 123 || item === 124 || item === 125;
});

indexOf()some()的ECMA-262算法在找到成功匹配时都会短路,但我认为some()实现在没有时会更快火柴。但是,另一位用户指出indexOf()解决方案is faster

如果indexOf()代码必须遍历数组多次,那么{{1}}代码如何更有效?

1 个答案:

答案 0 :(得分:4)

问题是 - 你的问题高度依赖于标准本身,而不是标准的实施方式。

说,不同引擎之间的结果可能不一致。

非常明显的假设是"调用函数会产生开销"某些引擎中的某些时间可能会通过内联函数调用和其他一些棘手的优化来缓解。

总结一下:没有一个正确的答案,任何不使用任何ES实现的引用+运行时细节(cpu指令/操作码,使用的优化)的答案 - 只是一种推测。