1. 语法:
arr.reduce((prev, cur, index, arr) => {
...
}, init);
①. 参数:
arr:表示原数组.
prev:表示上一次调用回调时的返回值、或初始值init(第一次).
cur:表示当前正在处理的数组元素.
index:表示当前正在处理的数组元素的索引,若有init值,则索引为0,否则索引为1.
init:表示初始值.
2. 实例:
var arr = [3, 9, 4, 3, 6, 0, 9];
// 1. 求数组项之和
var sum = arr.reduce((prev, cur) => {
return prev + cur;
}, 0);
①. 由于传入了初始值0,开始时prev的值为0,cur的值为数组第一项3.
②. 相加后返回值为3,作为下一轮回调的prev值,再继续与下一个数组项相加...
③. 直至完成所有数组项的和并返回.
// 2. 求数组项最大值
var max = arr.reduce((prev, cur) => {
return Math.max(prev, cur);
});
①. 由于未传入初始值,所以开始时prev的值为数组第一项3,cur的值为数组第二项9.
②. 取两值最大值后继续进入下一轮回调.
// 3. 数组去重
var newArr = arr.reduce((prev, cur) => {
prev.indexOf(cur) === -1 && prev.push(cur);
return prev;
}, []);
实现基本原理:
①. 初始化一个空数组
②. 将需要去重处理的数组中的第1项在初始化数组中查找,如果找不到(空数组中肯定找不到),就将该项添加到初始化数组中
③. 将需要去重处理的数组中的第2项在初始化数组中查找,如果找不到,就将该项继续添加到初始化数组中
④. ……
⑤. 将需要去重处理的数组中的第n项在初始化数组中查找,如果找不到,就将该项继续添加到初始化数组中
⑥. 将这个初始化数组返回
标签:es6,arr,cur,初始化,初始值,reduce,数组,prev
From: https://blog.51cto.com/u_16237074/8532209