2013-07-31 268 views
0

我有兩段代碼都計算數組的元素的和代碼之間的差異:薩姆元件,

var sum = array.reduce(function(previousValue, currentValue) { 
    return previousValue + currentValue; 
}, 0); 

var sum = 0; 
array.forEach(function(e) { 
    sum += e; 
}); 

是不同的旁邊在它們之間有任何差異實現?什麼時候使用哪一個更好?

+0

兩者都是有效的,選擇其中一個是偏好問題。我個人更喜歡「減少」。 – elclanrs

回答

3

除了您的個人風格偏好,實際表現也可能有所不同。但是這兩個看起來表現相似。

如果你正在做這個工作的很多(或大陣列)可以考慮使用第三條道路:

var sum = 0; 
for (l = array.length; l--;) { sum += array[l]; } 

這將是方式更快。檢查this performance test的實際結果。

注意:如果您緩存數組長度,您將獲得一些速度。因此,而不是這樣做:

for (var i = 0; i < array.length; i++) {...} 

這樣做:

var l = array.length; 
for (; l--;) { ... } 

或本:

for (l = array.length; l--;) { ... } 
+0

循環仍然規則:) – Cherniv

+0

或'while(l - ){...}' – David

2

第一個是不是第二個稍重。 最快的方法是避免爲每個步驟調用函數,並使用像for這樣的循環。

var sum = 0; 
for(var i=0, len=array.length; i<len; i++){ 
    sum += array[i]; 
} 
1

如使用這兩種功能的涉及執行該會招致函數調用開銷(這樣既不會再efficent)每個元素的回調函數,使用循環將提供更好的性能。