1. 程式人生 > >reduce實現數組求和

reduce實現數組求和

images http ++ 返回值 語法 provided red sum 安利

對於實現數組求和,我們常用的思路是通過for、while,對數組進行叠代,依次將他們的值加起來,下面列舉常用的兩種方法

第一種:

var arr = [1,2,3,4,5,6]; 
Array.prototype.sum = function (){ 
    var sumResult = 0; 
    for (var i = 0; i < this.length; i++) { 
      sumResult += parseInt(this[i]); 
    } 
    return sumResult; 
} 
arr.sum(); 

第二種:

var arr = [1,2,3,4,5,6]; 
Array.prototype.sum 
= function () { var sumResult = 0; var i = this.length; while (i--) { sumResult += parseInt(this[i]); } return sumResult; } arr.sum();

經時間對比驗證,此兩種方法耗時較多。

安利一種新方法,reduce方法。

對數組中的所有元素調用指定的回調函數。該回調函數的返回值為累積結果,並且此返回值在下一次調用該回調函數時作為參數提供。

語法: array1.reduce(callbackfn[, initialValue])

reduce()方法接收callbackfn函數,而這個函數包含四個參數:

  function callbackfn(preValue,curValue,index,array){}

  • preValue: 上一次調用回調返回的值,或者是提供的初始值(initialValue)
  • curValue: 數組中當前被處理的數組項
  • index: 當前數組項在數組中的索引值
  • array: 調用 reduce()方法的數組

回調函數第一次執行時,preValuecurValue 可以是一個值,如果 initialValue 在調用 reduce() 時被提供,那麽第一個 preValue 等於 initialValue

,並且curValue 等於數組中的第一個值;如果initialValue 未被提供,那麽preValue 等於數組中的第一個值,`curValue等於數組中的第二個值。eg:

var arr = [0,1,2,3,4]; 
arr.reduce(function (preValue,curValue,index,array) { 
    return preValue + curValue; 
}); 

上個例子中的回調函數會被執行4次,

技術分享下面就用reduce實現我們的數組求和:

var arr = [1,2,3,4,5,6]; 
Array.prototype.sum = function (){ 
    var sumResult = 0; 
    return this.reduce(function (preValue, curValue) {
     return sumResult = preValue + curValue; 
    });
    return sumResult;
} 
console.log(arr.sum());

結論:三種方法,經對比,reduce用時最短,性能最佳。

參考文章:http://www.w3cplus.com/javascript/array-part-8.html

reduce實現數組求和