Skip to content

series

創建一個數字序列,從起始值到結束值,按指定步長遞增。

基礎用法

typescript
import { series } from 'radash'

const numbers = series(1, 5)
// [1, 2, 3, 4, 5]

const evenNumbers = series(0, 10, 2)
// [0, 2, 4, 6, 8, 10]

語法

typescript
function series(
  start: number,
  end: number,
  step?: number
): number[]

參數

  • start (number): 序列的起始值
  • end (number): 序列的結束值
  • step (number, 可選): 步長,默認為1

返回值

返回一個包含從start到end的數字數組,按step遞增。

示例

基本序列

typescript
import { series } from 'radash'

console.log(series(1, 5))      // [1, 2, 3, 4, 5]
console.log(series(0, 3))      // [0, 1, 2, 3]
console.log(series(-2, 2))     // [-2, -1, 0, 1, 2]
console.log(series(5, 1))      // [5, 4, 3, 2, 1] (自動遞減)

指定步長

typescript
import { series } from 'radash'

console.log(series(0, 10, 2))   // [0, 2, 4, 6, 8, 10]
console.log(series(1, 10, 2))   // [1, 3, 5, 7, 9]
console.log(series(0, 10, 3))   // [0, 3, 6, 9]
console.log(series(10, 0, -2))  // [10, 8, 6, 4, 2, 0]

負數序列

typescript
import { series } from 'radash'

console.log(series(-5, -1))     // [-5, -4, -3, -2, -1]
console.log(series(-10, -1, 2)) // [-10, -8, -6, -4, -2]
console.log(series(-1, -5))     // [-1, -2, -3, -4, -5]

小數序列

typescript
import { series } from 'radash'

console.log(series(0, 1, 0.2))  // [0, 0.2, 0.4, 0.6, 0.8, 1]
console.log(series(1, 2, 0.25)) // [1, 1.25, 1.5, 1.75, 2]
console.log(series(0.1, 0.5, 0.1)) // [0.1, 0.2, 0.3, 0.4, 0.5]

空序列

typescript
import { series } from 'radash'

console.log(series(5, 1, 1))    // [] (無法遞增到目標)
console.log(series(1, 5, -1))   // [] (無法遞減到目標)
console.log(series(1, 1))       // [1] (起始等於結束)

在循環中使用

typescript
import { series } from 'radash'

// 遍歷序列
for (const i of series(1, 5)) {
  console.log(`第${i}次迭代`)
}

// 輸出:
// 第1次迭代
// 第2次迭代
// 第3次迭代
// 第4次迭代
// 第5次迭代

創建索引數組

typescript
import { series } from 'radash'

const indices = series(0, 4)
console.log(indices) // [0, 1, 2, 3, 4]

// 用於數組操作
const fruits = ['apple', 'banana', 'cherry', 'date', 'elderberry']
const fruitIndices = series(0, fruits.length - 1)

fruitIndices.forEach(index => {
  console.log(`${index}: ${fruits[index]}`)
})

創建矩陣索引

typescript
import { series } from 'radash'

const rows = series(0, 2)
const cols = series(0, 3)

// 創建3x4矩陣的索引
for (const row of rows) {
  for (const col of cols) {
    console.log(`位置 [${row}, ${col}]`)
  }
}

生成測試數據

typescript
import { series } from 'radash'

// 生成用戶ID
const userIds = series(1, 10)
console.log(userIds) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

// 生成價格范圍
const prices = series(10, 100, 10)
console.log(prices) // [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

// 生成時間戳
const timestamps = series(Date.now(), Date.now() + 86400000, 3600000) // 每小時一個

與map結合使用

typescript
import { series } from 'radash'

// 創建對象數組
const users = series(1, 5).map(id => ({
  id,
  name: `User ${id}`,
  email: `user${id}@example.com`
}))

console.log(users)
// [
//   { id: 1, name: 'User 1', email: 'user1@example.com' },
//   { id: 2, name: 'User 2', email: 'user2@example.com' },
//   { id: 3, name: 'User 3', email: 'user3@example.com' },
//   { id: 4, name: 'User 4', email: 'user4@example.com' },
//   { id: 5, name: 'User 5', email: 'user5@example.com' }
// ]

創建重復模式

typescript
import { series } from 'radash'

// 創建交替的布爾值
const alternating = series(0, 9).map(i => i % 2 === 0)
console.log(alternating) // [true, false, true, false, true, false, true, false, true, false]

// 創建重復的顏色
const colors = ['red', 'green', 'blue']
const colorPattern = series(0, 9).map(i => colors[i % colors.length])
console.log(colorPattern) // ['red', 'green', 'blue', 'red', 'green', 'blue', 'red', 'green', 'blue', 'red']

注意事項

  1. 包含結束值: 序列包含結束值
  2. 自動方向: 如果start大於end且step為正,會自動使用負步長
  3. 空序列: 如果無法通過指定步長到達結束值,返回空數組
  4. 浮點數精度: 浮點數運算可能有精度問題
  5. 性能: 對於大范圍序列,考慮內存使用

與其他方法的區別

  • Array.from({length: n}, (_, i) => i): 只能從0開始
  • [...Array(n).keys()]: 只能從0開始到n-1
  • series(): 可以指定任意起始和結束值,以及步長

實際應用場景

  1. 分頁: 生成頁碼序列
  2. 測試數據: 生成測試用的ID序列
  3. 圖表: 生成坐標軸刻度
  4. 循環: 替代for循環的索引
  5. 矩陣操作: 生成矩陣索引

Released under the MIT License.