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()
: 返回新数组,而不是迭代器
实际应用场景
- 流式处理: 处理大量数据时,逐个处理元素
- 条件遍历: 根据条件决定是否继续遍历
- 内存优化: 避免一次性加载所有数据到内存
- 自定义迭代: 实现自定义的迭代逻辑
- 异步处理: 在异步环境中逐个处理元素