定义和用法
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
reduce() 可以作为一个高阶函数,用于函数的 compose。
注意: reduce() 对于空数组是不会执行回调函数的。
语法
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
参数
参数 | 描述 |
---|---|
function(total,currentValue, index,arr) | 必需。用于执行每个数组元素的函数。 函数参数:参数描述total必需。初始值, 或者计算结束后的返回值。currentValue必需。当前元素currentIndex可选。当前元素的索引arr可选。当前元素所属的数组对象。 |
initialValue | 可选。传递给函数的初始值 |
例子(数组去重)
var newArr = arr.reduce(function (prev, cur) {
!prev.includes(cur) && prev.push(cur);
return prev;
},[]);
分析
1.初始化一个空数组
2.将需要去重处理的数组中的每一项在初始化数组中查找,如果找不到,就将该项添加到初始化数组中
- 将这个初始化数组返回
总结
reduce方法接受两个参数 第一个参数为一个函数 数组循环是的每一个值都会在该方法中被(加工处理),第二个参数是一个初始值(也就是第一个参数的参数的第一个值(第一个参数为函数)是上面的prev)。
开始手写
1.reduce 方法会遍历数组的每一个值。
//语法 array.reduce(function(prev, currentValue, currentIndex, arr), initialValue)
Array.prototype.MyReduce = function(fn, initialValue){
//浅拷贝数组
var arr = Array.prototype.slice.call(this);
//注意: reduce() 对于空数组是不会执行回调函数的。
if(!arr.length){
return
}
var res;//res(是上面的prev)
//默认初始值
res = initialValue ? initialValue : arr[0];
//遍历数组的每一个值
for(var i = 0; i < arr.length; i++) {
//每一个值都会在该方法中被(加工处理),
res = fn.call(null, res, arr[i], i, this);
}
//最后的返回值
return res
}
参考链接(基础用法来自菜鸟教程)
https://www.runoob.com/jsref/jsref-reduce.html
网友评论