1
这个问题是来自于这个问题的答案,竞争激励更有效:indexOf with multiple arguments如何Array.indexOf比Array.some
用户想知道一个有效的方法来测试一个或多个存在的数组数组中给出的整数。具体来说,给定一个数组和数字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;
});
双方找到成功的匹配时,ECMA-262算法indexOf()
和some()
短路,但我会认为当没有匹配时,some()
的实现会更快。但另一位用户指出indexOf()
解决方案is faster。
indexOf()
代码是如何更有效的,即使它必须迭代数组多次?
我会想象因为'.indexOf'缺少调用函数的开销。对于较大的阵列,“some”可能更有效。 – Blender
'Array.prototype.indexOf'返回'-1',如果没有找到元素,我会假设你的'=== 0'不是预期的,应该是'!== -1' – ASDFGerte
使用不同的浏览器,并且多次运行测试,我得到了不同的结果。在Chrome 52上,test2速度更快。在Firefox 50上,test1更快。不太确定那么一个比另一个快。 – noKid