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 }
注意事項
- 迭代器狀態: 迭代器會記住當前位置,每次調用
next()
都會前進到下一個元素 - 一次性使用: 迭代器只能向前遍歷,不能重置或向後遍歷
- 空數組處理: 如果數組為空,第一次調用
next()
就返回{ done: true }
- 性能: 時間復雜度為 O(1) 每次調用,總體為 O(n)
與其他方法的區別
for...of
: 直接遍歷數組,語法更簡潔iterate()
: 返回迭代器對象,提供更細粒度的控制forEach()
: 立即執行所有元素,無法中途停止map()
: 返回新數組,而不是迭代器
實際應用場景
- 流式處理: 處理大量數據時,逐個處理元素
- 條件遍歷: 根據條件決定是否繼續遍歷
- 內存優化: 避免一次性加載所有數據到內存
- 自定義迭代: 實現自定義的迭代邏輯
- 異步處理: 在異步環境中逐個處理元素