1、What
reduce() 方法 : 對(duì)累加器和數(shù)組的每個(gè)值(從左向右)應(yīng)用一個(gè)函數(shù),以將其減少為單個(gè)值。
返回值為函數(shù)累計(jì)處理的結(jié)果。
2、How
⑴語(yǔ)法
arr.reduce(callback,[initialValue])
callback 執(zhí)行數(shù)組中每個(gè)值的函數(shù),有四個(gè)參數(shù):
accumulator 上一次調(diào)用回調(diào)返回的值,或者是提供的初始值(initialValue);
currentValue 數(shù)組中正在處理的元素;
currentIndex 數(shù)據(jù)中正在處理的元素索引,如果提供了initialValue,從0開(kāi)始;否則從1開(kāi)始;
array 調(diào)用reduce的數(shù)組。
initialValue 可選,其值用于第一次調(diào)用 callback 的第一個(gè)參數(shù)。
描述
reduce 為數(shù)組中的每一個(gè)元素依次執(zhí)行回調(diào)函數(shù),不包括數(shù)組中被刪除或從未被賦值的元素,接受四個(gè)參數(shù):初始值 accumulator
(或者上一次回調(diào)函數(shù)的返回值),當(dāng)前元素值 currentValue
,當(dāng)前索引 currentIndex ,調(diào)用 reduce 的數(shù)組。
回調(diào)函數(shù)第一次執(zhí)行時(shí),accumulator和 currentValue 的取值有兩種情況:調(diào)用 reduce 時(shí)提供initialValue,accumulator 取值為 initialValue ,currentValue 取數(shù)組中的第一個(gè)值;沒(méi)有提供 initialValue ,accumulator 取數(shù)組中的第一個(gè)值,currentValue 取數(shù)組中的第二個(gè)值。
注意: 不提供 initialValue ,reduce 會(huì)從索引1的地方開(kāi)始執(zhí)行 callback 方法,跳過(guò)第一個(gè)索引。提供 initialValue ,從索引0開(kāi)始。
如果數(shù)組為空并且沒(méi)有提供initialValue, 會(huì)拋出TypeError
。如果數(shù)組僅有一個(gè)元素(無(wú)論位置如何)并且沒(méi)有提供initialValue, 或者有提供initialValue但是數(shù)組為空,那么此唯一值將被返回并且callback不會(huì)被執(zhí)行。
Array.prototype.reduce()
⑵例子
例1:
var students = [
{id:1,score:80},
{id:2,score:50},
{id:3,score:70}
];
var sum = function(previousResult,item,index,array){
return previousResult+item.score;
};
students.reduce(sum,0); // 200```
例2:http://www.itdecent.cn/p/6cb6dec225c8