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