Enkeltgjentakelse av iteratorer i JavaScript
Hver iterator kan bare delta i en løkke
én gang. Dette er litt overraskende,
men logisk - tross alt setter en gjennomgått iterator
sin done til false,
og kan derfor ikke gjentas mer.
La oss overbevise oss om dette. La oss si vi har følgende generator:
function *func() {
yield 1;
yield 2;
yield 3;
}
La oss lage en iterator:
let iter = func();
La oss gjennomgå iteratoren med én løkke:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
La oss nå gjennomgå iteratoren med to løkker:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
for (let elem of iter) {
console.log(elem); // fungerer ikke
}
For å løse problemet må du for hver ny løkke opprette din egen iterator:
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
}
Vi kan forenkle:
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
Korriger feilen som er begått i følgende kode:
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);
}