⊗jsSpItOL 65 of 294 menu

Jednorázová práce iterátorů v JavaScriptu

Každý iterátor se může účastnit cyklu pouze jednou. To je trochu neočekávané, ale logické - protože provedený iterátor nastaví své done na false, a tedy již nemůže být dále procházen.

Přesvědčme se o tom. Předpokládejme, že máme následující generátor:

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

Vytvořme iterátor:

let iter = func();

Projděme iterátor jedním cyklem:

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

Nyní projděme iterátor dvěma cykly:

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

Pro řešení problému je potřeba pro každý nový cyklus vytvořit vlastní iterátor:

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 }

Můžeme zjednodušit:

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

Opravte chybu, které bylo dopuštěno v následujícím kódu:

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); }
Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικά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
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout