这个问题的灵感来自于这个问题的竞争性答案:indexOf with multiple arguments
用户想知道一种有效的方法来测试数组是否存在数组中给定的一个或多个整数。具体来说,给定一个数组和数字 123
、124
和 125
,您如何判断数组中是否存在这些整数中的一个或多个给定的数组。建议了两种解决方案:
使用 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()
的 ECMA-262 算法和 some()
找到成功匹配时短路,但我认为 some()
实现在没有匹配时会更快。然而,另一位用户指出 indexOf()
解决方案 is faster .
indexOf()
代码如何在必须遍历数组更多次的情况下更高效?
最佳答案
问题是 - 您的问题高度依赖于标准本身,而不是标准的实现方式。
也就是说,不同引擎之间的结果可能不一致。
在某些引擎中“存在调用函数的开销”的非常明显的假设可能会通过内联函数调用和其他一些棘手的优化来缓解。
总结一下:对此没有单一的正确答案,任何不使用任何对 ES 实现的引用+运行时细节(cpu 指令/操作码,使用的优化)的答案都只是一种推测。
关于javascript - Array.indexOf 如何比 Array.some 更高效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39006845/