Skip to content

iterate

創建一個迭代器,用於遍歷數組元素。

基礎用法

typescript
import { iterate } from 'radash'

const numbers = [1, 2, 3, 4, 5]
const iterator = iterate(numbers)

let result = iterator.next()
while (!result.done) {
  console.log(result.value) // 1, 2, 3, 4, 5
  result = iterator.next()
}

語法

typescript
function iterate<T>(
  array: readonly T[]
): Iterator<T>

參數

  • array (readonly T[]): 要迭代的數組

返回值

返回一個標准的JavaScript迭代器對象,包含 next() 方法。

示例

基本迭代

typescript
import { iterate } from 'radash'

const fruits = ['apple', 'banana', 'cherry']
const iterator = iterate(fruits)

console.log(iterator.next()) // { value: 'apple', done: false }
console.log(iterator.next()) // { value: 'banana', done: false }
console.log(iterator.next()) // { value: 'cherry', done: false }
console.log(iterator.next()) // { value: undefined, done: true }

使用for...of循環

typescript
import { iterate } from 'radash'

const numbers = [1, 2, 3, 4, 5]
const iterator = iterate(numbers)

for (const num of iterator) {
  console.log(num) // 1, 2, 3, 4, 5
}

手動控制迭代

typescript
import { iterate } from 'radash'

const users = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 3, name: 'Charlie' }
]

const iterator = iterate(users)

// 獲取第一個元素
const first = iterator.next()
console.log(first.value) // { id: 1, name: 'Alice' }

// 跳過第二個元素
iterator.next()

// 獲取第三個元素
const third = iterator.next()
console.log(third.value) // { id: 3, name: 'Charlie' }

條件迭代

typescript
import { iterate } from 'radash'

const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
const iterator = iterate(numbers)

let result = iterator.next()
while (!result.done && result.value <= 5) {
  console.log(result.value) // 1, 2, 3, 4, 5
  result = iterator.next()
}

與生成器函數結合

typescript
import { iterate } from 'radash'

function* filterEven(iterator: Iterator<number>) {
  let result = iterator.next()
  while (!result.done) {
    if (result.value % 2 === 0) {
      yield result.value
    }
    result = iterator.next()
  }
}

const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
const iterator = iterate(numbers)

for (const even of filterEven(iterator)) {
  console.log(even) // 2, 4, 6, 8, 10
}

處理空數組

typescript
import { iterate } from 'radash'

const emptyArray: number[] = []
const iterator = iterate(emptyArray)

const result = iterator.next()
console.log(result) // { value: undefined, done: true }

注意事項

  1. 迭代器狀態: 迭代器會記住當前位置,每次調用 next() 都會前進到下一個元素
  2. 一次性使用: 迭代器只能向前遍歷,不能重置或向後遍歷
  3. 空數組處理: 如果數組為空,第一次調用 next() 就返回 { done: true }
  4. 性能: 時間復雜度為 O(1) 每次調用,總體為 O(n)

與其他方法的區別

  • for...of: 直接遍歷數組,語法更簡潔
  • iterate(): 返回迭代器對象,提供更細粒度的控制
  • forEach(): 立即執行所有元素,無法中途停止
  • map(): 返回新數組,而不是迭代器

實際應用場景

  1. 流式處理: 處理大量數據時,逐個處理元素
  2. 條件遍歷: 根據條件決定是否繼續遍歷
  3. 內存優化: 避免一次性加載所有數據到內存
  4. 自定義迭代: 實現自定義的迭代邏輯
  5. 異步處理: 在異步環境中逐個處理元素

Released under the MIT License.