⊗jsSpItOL 65 of 294 menu

Еднократна работа на итератори в JavaScript

Всеки итератор може да участва в цикъл само веднъж. Това е малко неочаквано, но логично - все пак преминалият итератор установява своето done на false, което означава, че не може да се обхожда повече.

Нека се убедим в това. Да предположим, че имаме следния генератор:

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

Нека създадем итератор:

let iter = func();

Нека преминем през итератора с един цикъл:

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

Сега нека преминем през итератора с два цикъла:

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
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне