数组的reduce函数
reduce()
方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。(汇合)
先看个例子
const array1 = [1, 2, 3, 4]; const reducer = (accumulator, currentValue) => accumulator + currentValue; // 1 + 2 + 3 + 4 console.log(array1.reduce(reducer)); // expected output: 10 // 5 + 1 + 2 + 3 + 4 console.log(array1.reduce(reducer, 5)); // expected output: 15
reduce为数组中的每一个元素依次执行callback函数(reducer函数),
reducer 函数接收4个参数:
- Accumulator (acc) (累计器)
- Current Value (cur) (当前值)
- Current Index (idx) (当前索引)
- Source Array (src) (源数组)
回到函数第一次执行时,accumulator
和currentValue
的取值有两种情况:
1、如果调用reduce()
时提供了initialValue
,accumulator
取值为initialValue
,currentValue
取数组中的第一个值;
2、如果没有提供 initialValue
,那么accumulator
取数组中的第一个值,currentValue
取数组中的第二个值。
手写reduce
Array.prototype.myReduce = function(fn, base){ if(this.length === 0 && !base){ throw new Error('出错了') } for(let i = 0; i < this.length; i++){ if(!base){ base = fn(this[i],this[i+1], i, this) } else{ base = fn(base,this[i],i,this) } } return base; }