使用javascript Array reduce()方法有什麼真正的好處嗎?
reduce()方法的大多數用例可以用for迴圈輕鬆地重寫.而在JSPerf上的測試顯示,reduce()通常是60%-75%,這取決於每次迭代中執行的操作.
有沒有什麼真正的理由使用reduce()然後,除了能夠在“功能風格”中編寫程式碼?如果通過編寫更多的程式碼可以獲得60%的效能提升,那麼為什麼要使用reduce()?
編輯:實際上,像forEach()和map()這樣的其他功能方法都顯示出類似的效能,比簡單的迴圈慢至少60%.
以下是JSPerf測試(帶函式呼叫)的連結:ofollow,noindex" target="_blank">forloop vs forEach
>你可能想要做範圍.例如,您可能需要進行回撥函式或引用JavaScript物件.有關更多資訊,請參閱為什麼javascript不被阻止作用域.
>您的程式碼並不總是需要以全機速度執行.您可能甚至不會在瓶頸中優化程式碼.
>另外你不提供你的“JSPerf測試”,所以我們可以批評一下.例如,如果你已經有了一個縮減函式(或map或forEach函式),那麼我打賭表現將是par-par.即使不是這樣,測試方法可能有缺陷,特別是考慮到許多瀏覽器可能會不同地優化或具有不同的功能呼叫開銷.
sidenote:這是語法之間有效的效能比較,但是在語法不是手頭的問題時的無效效能比較:
myArray.map(function(x){return x+1}) // ...versus... for(var i=0; i<myArray.length; i++) { myArray[i] = myArray[i]+1; }
這將是一個有效的效能比較:
myArray.forEach(function(x){return x+1}) // ...versus... var plusOne = function(x){return x+1}; for(var i=0; i<myArray.length; i++) { plusOne(myArray[i]); } // (may need a side-effect if the compiler is smart enough to optimize this)
(也回覆你的編輯:.forEach()和.map()提供了更多的清晰度,並避免顯式迴圈int i = 0; i<array.length; i引數的需要)
http://stackoverflow.com/questions/9629431/is-there-any-real-benefit-for-using-javascript-array-reduce-method