这个问题的灵感来自于这个问题的竞争答案: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()
和some()
的ECMA-262算法在找到成功匹配时都会短路,但我认为some()
实现在没有时会更快火柴。但是,另一位用户指出indexOf()
解决方案is faster。
如果indexOf()
代码必须遍历数组多次,那么{{1}}代码如何更有效?
答案 0 :(得分:4)
问题是 - 你的问题高度依赖于标准本身,而不是标准的实施方式。
说,不同引擎之间的结果可能不一致。
非常明显的假设是"调用函数会产生开销"某些引擎中的某些时间可能会通过内联函数调用和其他一些棘手的优化来缓解。
总结一下:没有一个正确的答案,任何不使用任何ES实现的引用+运行时细节(cpu指令/操作码,使用的优化)的答案 - 只是一种推测。