Skip to content

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

注意事項

  1. 包含結束值: 結束值是包含的
  2. 步長: 步長可以是正數或負數
  3. 性能: 內存效率高,不會預先生成所有數字
  4. 無限循環: 注意避免創建無限循環的范圍

與其他函數的區別

  • range: 創建數字范圍的可迭代對象
  • Array.from: 可以將 range 轉換為數組
  • for...of: 可以直接迭代 range

性能

  • 時間復雜度: O(n),其中 n 是范圍大小
  • 空間復雜度: O(1),不預先生成所有數字
  • 適用場景: 循環、索引生成、數值計算

Released under the MIT License.