要实现ruduce方法首先要了解reduce,reduce有两个参数第一个参数,callback回调函数,第二个参数默认值可传任意类型。
reduce方法回调函数的参数;
1.上一次得到的结果
2.当前参数
3.下标
4.原数组
reduce方法的特点;
1.它的第一个参数的值依赖上一次得到的结果,如果没有给默认值回调函数的第一个参数则从0开始,第二个参数则从1开始,下表从1开始。
2.如果有默认值,回调函数的第一个参数则是它的默认值,第二个参数则从0开始,index从0开始。
具体实现见下面代码:
Array.prototype._reduce = function (callback, val) {
const arr = JSON.parse(JSON.stringify(this))
let index = 0 // 下标
let total = null // callback的第一个参数
// 判断第二个参数是否有值
if (val || val == 0) {
// 第二个参数有值callback的第一个参数等于val
total = val
} else {
// 如果第二个参数没有值callback的第一个参数从0开始,下标从1开始
total = arr[0]
index = 1
}
for (let i = index, l = arr.length; i < l; i++) {
// callback的第一个参数是它的返回值
total = callback(total, arr[i], i, arr)
}
// 返回最终结果给_reduce
return total
}