数组reduce基础使用
定义:
对数组中的每个元素执行一个自定义的累计器,将其结果汇总为单个返回值。
形式:
array.reduce((t, v, i, a) => {}, initValue)
参数:
-
callback:回调函数(
必选) -
initValue:初始值(
可选)
回调函数的参数
-
total(
t):累计器完成计算的返回值(必选) -
value(
v):当前元素(必选) -
index(
i):当前元素的索引(可选) -
array(
a):当前元素所属的数组对象(可选)
过程
- 以
t作为累计结果的初始值,不设置t则以数组第一个元素为初始值 - 开始遍历,使用累计器处理
v,将v的映射结果累计到t上,结束此次循环,返回t - 进入下一次循环,重复上述操作,直至数组最后一个元素
- 结束遍历,返回最终的
t
reduce的精华所在是将累计器逐个作用于数组成员上,把上一次输出的值作为下一次输入的值。
手写实现reduce累加器
Array.prototype.reduce = function (fn,p) {
let arr = this
let res = p || arr[0]
for(let i= p?0:1;i<arr.length;i++){
res = fn(res,arr[i],i,arr)
}
return res
}
let arr = [1,2,3,4,5,6]
let res1 = arr.reduce((pre,item,index,arr)=>{
return pre+item
},0)
let res2 = arr.reduce((pre,item,index,arr)=>{
return pre+item
},0)
console.log(res1)
console.log(res2)