Skip to content

range

基础用法

给定一个开始值、结束值、值和步长大小,返回一个生成器,该生成器将按步长大小从开始值生成到结束值。这对于用for…of循环替换for (let i = 0)很有用。Range将返回一个生成器,for…of将逐个调用它,因此创建大量范围也是安全的。

该接口与list相同。

向Python的range功能致敬(这里的意思是,虽然可能不是直接模仿Python的range函数,但设计上借鉴了其概念或功能)

import { range } from 'radash'
range(3) // yields 0, 1, 2, 3
range(0, 3) // yields 0, 1, 2, 3
range(0, 3, 'y') // yields y, y, y, y
range(0, 3, () => 'y') // yields y, y, y, y
range(0, 3, i => i) // yields 0, 1, 2, 3
range(0, 3, i => `y${i}`) // yields y0, y1, y2, y3
range(0, 3, obj) // yields obj, obj, obj, obj
range(0, 6, i => i, 2) // yields 0, 2, 4, 6
for (const i of range(0, 200, 10)) {
console.log(i) // => 0, 10, 20, 30 ... 190, 200
}
for (const i of range(0, 5)) {
console.log(i) // => 0, 1, 2, 3, 4, 5
}

签名

range函数可以通过不同的参数做很多事情。

range(size)

当给定一个参数时,它被视为size(大小)。返回一个生成器,该生成器生成从0到size的值。

range(3) // yields 0, 1, 2, 3

range(start, end)

当给定两个参数时,它们被视为start(开始)和end(结束)。返回一个生成器,该生成器生成从start到end的值。

range(2, 6) // yields 2, 3, 4, 5, 6

range(start, end, value)

当给定第三个参数时,它被视为生成器中要生成的value(值)。如果value是一个函数,那么它会带着一个索引参数被调用,以创建每个值。

range(2, 4, {}) // yields {}, {}, {}
range(2, 4, null) // yields null, null, null
range(2, 4, (i) => i) // yields 2, 3, 4

range(start, end, value, step)

当给定第四个参数时,它被视为从start到end生成值时跳过的step(步长)大小。

range(2, 4, i => i, 2) // yields 2, 4
range(25, 100, i => i, 25) // yields 25, 50, 75, 100