JavaScriptでのカスタムイテレータの実装方法


  1. Symbol.iteratorを使用したカスタムイテレータの定義: カスタムイテレータを定義するには、オブジェクトにSymbol.iteratorキーを持つメソッドを追加します。このメソッドは、nextメソッドを持つオブジェクトを返す必要があります。nextメソッドは、valueとdoneプロパティを持つオブジェクトを返し、反復処理の結果を表します。
const customIterator = {
  [Symbol.iterator]() {
    let count = 1;
    return {
      next() {
        if (count <= 3) {
          return { value: count++, done: false };
        } else {
          return { done: true };
        }
      }
    };
  }
};
for (const item of customIterator) {
  console.log(item); // 1, 2, 3
}
  1. ジェネレータ関数を使用したカスタムイテレータの定義: ジェネレータ関数を使用することで、より柔軟なカスタムイテレータを定義することができます。ジェネレータ関数は、yieldキーワードを使用して反復処理の値を返し、関数の実行を一時停止することができます。
function* customIterator() {
  let count = 1;
  while (count <= 3) {
    yield count++;
  }
}
for (const item of customIterator()) {
  console.log(item); // 1, 2, 3
}

カスタムイテレータを実装することで、自身のデータ構造に対してfor...ofループや他の反復処理を実行することができます。これにより、データの集合やシーケンスに対して独自の操作を行いやすくなります。ぜひ、これらの方法を試してみてください。