reduce實現數組求和


對於實現數組求和,我們常用的思路是通過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()方法的數組

回調函數第一次執行時,preValue 和 curValue 可以是一個值,如果 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM