JavaScript - Use Array reduce to get array sum

目前的瀏覽器(參閱Mozilla Developer Network)應該都有支援Array.reduce的使用,這個function

能夠讓你輕易地做到一個陣列內所有值的累加,你只需要在reduce內定義的

function(x,y){return x+y}就可以得到一個回傳值。

一個範例使用如下:

var records = [0,1,2,3];
var total = records.reduce(arr_sum);
function arr_sum(x, y ){
    return x+y;
}
使用上面的code,就可以得到total => 6 的結果,執行過程如下:

由於這個reduce在第一次呼叫時,會先檢查是否有設初始值,如果沒有

他會直接將previousValue (records[0]) + currentValue (records[1])做相加,return 1

再來他會做previousValue (1) +currentValue (records[2])做相加,return 3

最後他會做previousValue (3) +currentValue (records[3])做相加,return 6


在上面的使用reduce內設置的第一個參數為function設置,其第二個可選參數可設置

進入該function時一開始的初始值,若沒設置的話即為0,若有設置的話,在一開始

會先做previousValue (initialize value) + currentValue (records[0]),因此會多一個呼叫。

var total = records.reduce(arr_sum, initialize value);

當然reduce下的function行為,不是只有預設的兩個參數可供使用,另外還可以讀到

records array的index及array本身,如下:

function arr_sum(x, y, index, array){
      console.log(array[index]);
      return x+y;
}

如此一來還會印出
1
2
3
由於第一次呼叫回傳為1

問題來了,假如你想做的行為只要0+1+2時就想要得到結果時,是否可以提早跳出呢?

你可以在裡面放個判斷式,如下:

function arr_sum(x, y, index, array){
      if(index < 3)
          return x+y;
}

如此一來在進入第三次呼叫時,即index = 3時,不做即可。

留言