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