Skip to content

迭代器

上次更新 2025年3月17日星期一 15:49:44 字数 0 字 时长 0 分钟

迭代器规范

  • 迭代器是一个对象
  • 迭代器有 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);
}
关注公众号