Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

lodash源码分析之createRange #367

Open
HeftyKoo opened this issue Jun 6, 2020 · 0 comments
Open

lodash源码分析之createRange #367

HeftyKoo opened this issue Jun 6, 2020 · 0 comments
Labels
internal 内部函数或方法 系列文章

Comments

@HeftyKoo
Copy link
Owner

HeftyKoo commented Jun 6, 2020

本文为读 lodash 源码的第三百六十六篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash

gitbook也会同步仓库的更新,gitbook地址:pocket-lodash

依赖

import baseRange from './baseRange.js'
import toFinite from '../toFinite.js'

lodash源码分析之baseRange

lodash源码分析之toFinite

源码分析

createRange 用来创建一个生成范围数组的函数,接收一个参数 fromRight ,如果 fromRighttrue ,所创建的函数生成的范围数组从大到小排序。

源码如下:

function createRange(fromRight) {
  return (start, end, step) => {
    start = toFinite(start)
    if (end === undefined) {
      end = start
      start = 0
    } else {
      end = toFinite(end)
    }
    step = step === undefined ? (start < end ? 1 : -1) : toFinite(step)
    return baseRange(start, end, step, fromRight)
  }
}

其实返回的函数,最终会调用 baseRange 来实现,但是在调用之前,会对参数进行合规化处理。

处理start和end

先是调用 toFinite 来确保 start 为有限数字。

如果 endundefined ,则将 start 赋值给 end ,并将 start 设置为 0 ,这种情况下生成的数组中的数值范围在 0 - start 之间。

如果有传 end ,也调用 toFiniteend 转换成有限数字。

处理step

如果 step 没传,则判断 start 是否比 end 小,如果是,则 step 默认为 1 ,否则为 -1 ,因为 startend 大时,需要的是递减数组。

如果有传,则调用 toFinite 确保 step 为有限数字。

最终调用 baseRange 来创建数组。

License

署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)

最后,所有文章都会同步发送到微信公众号上,欢迎关注,欢迎提意见:

作者:对角另一面

@HeftyKoo HeftyKoo added 系列文章 internal 内部函数或方法 labels Jun 6, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
internal 内部函数或方法 系列文章
Projects
None yet
Development

No branches or pull requests

1 participant