range
创建一个数字范围的可迭代对象。
语法
typescript
range(
start: number,
end: number,
step?: number
): Iterable<number>
参数
start
(number): 范围的起始值end
(number): 范围的结束值(包含)step
(number, 可选): 步长,默认为 1
返回值
Iterable<number>
: 数字范围的可迭代对象
示例
基本用法
typescript
import { range } from 'radash'
// 从 0 到 5
for (const i of range(0, 5)) {
console.log(i) // 0, 1, 2, 3, 4, 5
}
指定步长
typescript
import { range } from 'radash'
// 从 0 到 10,步长为 2
for (const i of range(0, 10, 2)) {
console.log(i) // 0, 2, 4, 6, 8, 10
}
负步长
typescript
import { range } from 'radash'
// 从 5 到 0,步长为 -1
for (const i of range(5, 0, -1)) {
console.log(i) // 5, 4, 3, 2, 1, 0
}
转换为数组
typescript
import { range } from 'radash'
const numbers = Array.from(range(1, 5))
// [1, 2, 3, 4, 5]
const evenNumbers = Array.from(range(0, 10, 2))
// [0, 2, 4, 6, 8, 10]
生成索引
typescript
import { range } from 'radash'
const items = ['apple', 'banana', 'cherry']
for (const i of range(0, items.length - 1)) {
console.log(`${i}: ${items[i]}`)
}
// 0: apple
// 1: banana
// 2: cherry
生成日期范围
typescript
import { range } from 'radash'
const startDate = new Date('2023-01-01')
const endDate = new Date('2023-01-05')
for (const i of range(0, 4)) {
const date = new Date(startDate)
date.setDate(startDate.getDate() + i)
console.log(date.toISOString().split('T')[0])
}
// 2023-01-01
// 2023-01-02
// 2023-01-03
// 2023-01-04
// 2023-01-05
生成字母
typescript
import { range } from 'radash'
for (const i of range(65, 90)) { // ASCII 码 A-Z
console.log(String.fromCharCode(i))
}
// A, B, C, ..., Z
生成斐波那契数列
typescript
import { range } from 'radash'
const fibonacci = []
let prev = 0, current = 1
for (const i of range(0, 9)) {
fibonacci.push(current)
const next = prev + current
prev = current
current = next
}
console.log(fibonacci)
// [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
生成网格坐标
typescript
import { range } from 'radash'
const grid = []
for (const x of range(0, 2)) {
for (const y of range(0, 2)) {
grid.push([x, y])
}
}
console.log(grid)
// [[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]
处理小数步长
typescript
import { range } from 'radash'
for (const i of range(0, 1, 0.2)) {
console.log(i.toFixed(1))
}
// 0.0, 0.2, 0.4, 0.6, 0.8, 1.0
注意事项
- 包含结束值: 结束值是包含的
- 步长: 步长可以是正数或负数
- 性能: 内存效率高,不会预先生成所有数字
- 无限循环: 注意避免创建无限循环的范围
与其他函数的区别
range
: 创建数字范围的可迭代对象Array.from
: 可以将 range 转换为数组for...of
: 可以直接迭代 range
性能
- 时间复杂度: O(n),其中 n 是范围大小
- 空间复杂度: O(1),不预先生成所有数字
- 适用场景: 循环、索引生成、数值计算