- 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
}
- ジェネレータ関数を使用したカスタムイテレータの定義:
ジェネレータ関数を使用することで、より柔軟なカスタムイテレータを定義することができます。ジェネレータ関数は、
yield
キーワードを使用して反復処理の値を返し、関数の実行を一時停止することができます。
function* customIterator() {
let count = 1;
while (count <= 3) {
yield count++;
}
}
for (const item of customIterator()) {
console.log(item); // 1, 2, 3
}
カスタムイテレータを実装することで、自身のデータ構造に対してfor...ofループや他の反復処理を実行することができます。これにより、データの集合やシーケンスに対して独自の操作を行いやすくなります。ぜひ、これらの方法を試してみてください。