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);
}