⊗jsSpItOL 65 of 294 menu

JavaScriptにおけるイテレータの単一使用性

各イテレータは、ループに一度しか参加できません。 これは少し意外ですが、理にかなっています。 なぜなら、イテレータが一度処理されると、 その done プロパティが false に設定され、 それ以上反復処理ができなくなるからです。

これを確認してみましょう。 次のようなジェネレータがあるとします:

function *func() { yield 1; yield 2; yield 3; }

イテレータを作成します:

let iter = func();

このイテレータを1つのループで反復処理します:

for (let elem of iter) { console.log(elem); // 1, 2, 3 }

次に、同じイテレータを2つのループで 反復処理しようとします:

for (let elem of iter) { console.log(elem); // 1, 2, 3 } for (let elem of iter) { console.log(elem); // 動作しない }

この問題を解決するには、 新しいループごとに新しいイテレータを 作成する必要があります:

let iter1 = func(); for (let elem of iter1) { console.log(elem); // 1, 2, 3 } let iter2 = func(); for (let elem of iter2) { console.log(elem); // 1, 2, 3 }

次のように簡略化できます:

for (let elem of func()) { console.log(elem); // 1, 2, 3 } for (let elem of func()) { console.log(elem); // 1, 2, 3 }

次のコードに含まれる誤りを修正してください:

function *func() { for (let i = 1; i <= 3; i++) { yield i; } } let elems = func(); for (let elem of elems) { console.log(elem); } for (let elem of elems) { console.log(elem); }
日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否