迭代器
迭代器规范
- 迭代器是一个对象
- 迭代器有 next 方法
- 迭代器有 done 和 value 属性
迭代器实现
js
function createIterator(items) {
let i = 0;
return {
next: function () {
return { done: i >= items.length, value: items[i++] };
},
};
}迭代器使用
js
const iterator = createIterator([1, 2, 3]);
console.log(iterator.next()); // { done: false, value: 1 }
console.log(iterator.next()); // { done: false, value: 2 }
console.log(iterator.next()); // { done: false, value: 3 }
console.log(iterator.next()); // { done: true, value: undefined }可迭代协议
- 可迭代协议是一个对象
- 可迭代协议有 Symbol.iterator 方法
- Symbol.iterator 方法返回一个迭代器
常见题目
斐波那契数列
js
function* fibonacci() {
let a = 0,
b = 1;
while (true) {
yield a;
[a, b] = [b, a + b];
}
}
// 使用
const fib = fibonacci();
for (const i in 100) {
const { value, done } = fib.next();
console.log(i);
if (i < 100) continue;
console.log(value);
}