目前的瀏覽器(參閱Mozilla Developer Network)應該都有支援Array.reduce的使用,這個function
能夠讓你輕易地做到一個陣列內所有值的累加,你只需要在reduce內定義的
function(x,y){return x+y}就可以得到一個回傳值。
一個範例使用如下:
由於這個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]),因此會多一個呼叫。
當然reduce下的function行為,不是只有預設的兩個參數可供使用,另外還可以讀到
records array的index及array本身,如下:
如此一來還會印出
1
2
3
由於第一次呼叫回傳為1
問題來了,假如你想做的行為只要0+1+2時就想要得到結果時,是否可以提早跳出呢?
你可以在裡面放個判斷式,如下:
如此一來在進入第三次呼叫時,即index = 3時,不做即可。
能夠讓你輕易地做到一個陣列內所有值的累加,你只需要在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時,不做即可。
留言
張貼留言