# createRange
# Description
创建一个range或rangeRight函数。
# Params
(fromRight)
# Return
Function
# Depend
import baseRange from './baseRange.js'
import toFinite from '../toFinite.js'
# Code
function createRange(fromRight) {
return (start, end, step) => {
// Ensure the sign of `-0` is preserved.
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)
}
}
# Analyze
- 最终返回的是一个函数,会做一些参数合规化的处理
- 首先通过
toFinite将start转为一个有限数字,会保留-0的符号 - 如果
end没有传入,则将start的值赋值给end, 将start置为 0,此时数组范围为0 - start - 如果传入了
end,同样的转为一个有限数字 step如果没有传入,会做判断,start < end的话为1, 否则为-1,这里是做递增和递减- 如果传入了同样转为有限数字
- 最终调用
baseRange生成数组,如果传入了fromRight则 从右到左 生成
# Remark
在 js 中 0 === -0 为 true ,这里通过 toFinite 转换时,会保留 -0 的符号位,便于后续处理
# Example
const func = createRange()
console.log(func(9)) // [ 0, 1, 2, 3, 4, 5, 6, 7, 8]
console.log(func(9, 0)) // [ 9, 8, 7, 6, 5, 4, 3, 2, 1]
console.log(func(1, 10, 3)) // [ 1, 4, 7]