手写实现js中的reduce

在深入了解js中的reduce这个函数中遇到不少问题,在MDN练习了使用场景之后,在手写实现方面看到一些文章不是很通俗易懂,后来在b站https://www.bilibili.com/video/BV1Q5411E7bb?t=652
这个老师的视频中对于手写实现有了一定的心得体会,以此记录;

let a = [[1,2],[3,4],5]
a.reduce((pre,cur,index,arr)=>{},object)

首先,原生的reduce参数分为两部分,第一部分为回调函数,及(pre,cur,index,arr)=>{} ,第二部分则为传入的参数,及object,之所以直接写为object,是因为它不仅仅可以是个数字,也能是个数组,对象,字符串。
其中最重要的无疑是pre,
首先,在没有传入object时,pre为传入数组的第一项,其次在回调函数callback中,它为上次执行的返回值,并且也是函数的最终返回值,这是个必须值(形参),
cur为pre的下一项,如果没有传入object它为传入数组第二项,反之则是第一项(必须项),
index为cur的下标(非必需),
arr为传入数组(非必需),
object(非必需),传入后默认为第一项;

//直接定义到原型链上
Array.prototype.myreduce = function (callback, n) {
    //检测传入的callback是否为函数
    if (typeof (callback) != 'function') { 
        return 'callback must be function'
    }
    
    let arr = this;
    //this为传入数组,先持久化,方便后续使用

    let pre = arguments.length == 1 ? arr[0] : n; 
    //*** 重点,初始pre的定义,如果arguments长度为一,则没有默认值pre初始值就是 this[0],及arr[0],反之,则为传入的值

    let index = arguments.length == 1 ? 1 : 0;
    // 这个则是初始index的值,也是分情况看待

    for (let i = index; i < arr.length; i++){
        pre = callback(pre, arr[i], i, arr)
    //pre的值为上次callback的返回值    
    }
    return pre;
}

结束。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值