Engangsiteration af iteratorer i JavaScript
Hver iterator kan kun deltage i en løkke
én gang. Dette er lidt overraskende,
men logisk - for en iterator, der er blevet gennemgået,
sætter sin done til false,
hvilket betyder, at den ikke kan itereres over mere.
Lad os overbevise os selv om dette. Lad os sige, at vi har følgende generator:
function *func() {
yield 1;
yield 2;
yield 3;
}
Lad os oprette en iterator:
let iter = func();
Lad os iterere over iteratoren med én løkke:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
Lad os nu prøve at iterere over iteratoren med to løkker:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
for (let elem of iter) {
console.log(elem); // virker ikke
}
For at løse problemet skal du for hver ny løkke oprette en ny 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
}
Ret fejlen, der er begået 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);
}