reduce() 是数组的归并方法,与forEach()、map()、filter()等迭代方法一样都会对数组每一项进行遍历,但是reduce() 可同时将前面数组项遍历产生的结果与当前遍历项进行运算,这一点是其他迭代方法无法企及的
arr.reduce() 不可改变原数组
reduce((previousValue, currentValue, currentIndex, array) => {return previousValue + currentValue}, initialValue)previousValue(前一次调用 callbackfn 得到的返回值)currentValue(数组中正在处理的元素)currentIndex(数组中正在处理的元素的索引)array被遍历的对象作为第一次调用 callback 函数时参数 previousValue 的值。若指定了初始值 initialValue,则 currentValue 则将使用数组第一个元素;否则 previousValue 将使用数组第一个元素,而 currentValue 将使用数组第二个元素。
1. 求数组项之和
由于传入了初始值0,所以开始时prev的值为0,cur的值为数组第一项3,相加之后返回值为3作为下一轮回调的prev值,然后再继续与下一个数组项相加,以此类推,直至完成所有数组项的和并返回。let arr = [3,9,4,3,6,0,9];let sum = arr.reduce((prev, cur) => {return prev + cur;},0);let arr = [{numb:2},{numb:3},{numb:5}];let sum = arr.reduce((prev, cur) => {return prev + cur.numb;},0);
2. 求数组项最大值
let arr = [3,9,4,3,6,0,9];let max = arr.reduce((prev, cur) => {return Math.max(prev,cur);});var arr = [{numb:2},{numb:3},{numb:5}];var max = arr.reduce((prev, cur) => {console.log(prev, cur)return Math.max(prev,cur.numb);},0);
3. 数组去重
var arr = [3,9,4,3,6,0,9];var newArr = arr.reduce(function (prev, cur) {prev.indexOf(cur) === -1 && prev.push(cur);return prev;},[]);
