1、What
reduce() 方法 : 对累加器和数组的每个值(从左向右)应用一个函数,以将其减少为单个值。
返回值为函数累计处理的结果。
2、How
⑴语法
arr.reduce(callback,[initialValue])
callback 执行数组中每个值的函数,有四个参数:
accumulator 上一次调用回调返回的值,或者是提供的初始值(initialValue);
currentValue 数组中正在处理的元素;
currentIndex 数据中正在处理的元素索引,如果提供了initialValue,从0开始;否则从1开始;
array 调用reduce的数组。
initialValue 可选,其值用于第一次调用 callback 的第一个参数。
描述
reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值 accumulator
(或者上一次回调函数的返回值),当前元素值 currentValue
,当前索引 currentIndex ,调用 reduce 的数组。
回调函数第一次执行时,accumulator和 currentValue 的取值有两种情况:调用 reduce 时提供initialValue,accumulator 取值为 initialValue ,currentValue 取数组中的第一个值;没有提供 initialValue ,accumulator 取数组中的第一个值,currentValue 取数组中的第二个值。
注意: 不提供 initialValue ,reduce 会从索引1的地方开始执行 callback 方法,跳过第一个索引。提供 initialValue ,从索引0开始。
如果数组为空并且没有提供initialValue, 会抛出TypeError
。如果数组仅有一个元素(无论位置如何)并且没有提供initialValue, 或者有提供initialValue但是数组为空,那么此唯一值将被返回并且callback不会被执行。
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.jianshu.com/p/6cb6dec225c8