フラットな反復子の解説
反復可能オブジェクトを反復処理し、ネストされた反復可能オブジェクトをフラット化するジェネレータを作成するには、次の手順に従います。
- ターミナル/SSH を開き、コーディングを練習するために
node
と入力します。
- ジェネレータ関数で再帰を使用します。
for...of
ループを使用して、与えられた反復可能オブジェクトの値を反復処理します。
Symbol.iterator
を使用して、各値が反復可能オブジェクトであるかどうかを確認します。
- そうであれば、
yield*
式を使用して同じジェネレータ関数に再帰的に委譲します。
- そうでなければ、現在の値を
yield
します。
以下はコードのサンプルです。
const flatIterator = function* (itr) {
for (let item of itr) {
if (item[Symbol.iterator]) yield* flatIterator(item);
else yield item;
}
};
const arr = [1, 2, [3, 4], [5, [6, [7], 8]], 9, new Set([10, 11])];
[...flatIterator(arr)]; // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
この例では、arr
は値の配列で、ネストされた配列とセットが含まれています。flatIterator
ジェネレータ関数は、これらのネストされた値をフラット化し、フラット化された配列を返します。