reduce探索lodash.reduce实现原理解析

本文探讨了reduce的基础使用和应用场景,并深入解析了lodash中reduce的实现原理,包括其对数组、普通对象及类数组对象的处理。文章通过简化代码展示了reduce的核心逻辑,强调了初始值的影响及lodash的参数判断和异常情况处理。最后,作者分享了学习reduce在函数式编程中的价值。
摘要由CSDN通过智能技术生成

讲解了 reduce 基础使用方法和场景的运用场景。本篇来分析一下 reduce 函数本身的实现原理。

实现 reduce 其实挺简单的,因为它本身的运行原理也不难,就是把数组进行遍历,然后组成合适的参数传递给回调函数,只要思路对了,去尝试几次,那么就理解了 reduce 。

最具有代表性的工具库当然是 lodash,因此本篇文章的主要内容会讲解 reduce 的基本实现,以及lodash 中是怎么来实现的,做了什么处理。

基本实现

实现思路:

  • 判断是否有初始值,因为有初始值和没有初始值对回调函数(reducer)执行的次数是有影响的。
  • 遍历数组
  • 组合参数传递给 reducer 进行执行
  • 获取到第三步返回值的时候,要把返回值存储起来,在下一次便利的时候作为reducer第一个参数来替换初始值。
  • 返回最终计算的value值

1

2

3

4

5

6

7

8

9

10

function reduce(array, reducer, initialValue = null) {

    let value = initialValue === null ? array[0] : initialValue; // 思路1

    let startIndex = initialValue === null ? 1 : 0; // 思路1

    for(let i = startIndex; i < array.length; i++) { // 思路 2

        const item = array[i]

        const res = reducer(value, item, i) // 思路3

        value = res; // 思路4

    }

    return value; // 思路5

}

测试一下:

1

2

console.log(reduce([1,2,3], (a, b) => (a + b), 0)) // 6

console.log(reduce([1,2,3], (a, b) => (a + b))) // 6<

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值