Ce face Iterator.prototype.map / filter / take / drop / flatMap
Aceste metode returnează un iterator nou, care calculează valorile doar când sunt cerute (evaluare leneșă). De aceea merg și pe secvențe infinite, ca un generator while (true): take(n) oprește după n valori.
map transformă fiecare valoare, filter le păstrează pe cele care îndeplinesc condiția, take(n) ia primele n, drop(n) le sare pe primele n, iar flatMap desface iterabilele returnate de funcție. Funcțiile primesc (valoare, indice).
Parametri
| Parametru | Descriere |
|---|---|
functie |
Pentru map, filter, flatMap: primește (valoare, indice). |
n |
Pentru take și drop: numărul de valori. |
Ce returnează
Un iterator nou.
Exemple
Exemplul 1: Primele pătrate impare dintr-o secvență infinită
function* naturale() {
let n = 1;
while (true) yield n++;
}
const rezultat = naturale().filter((n) => n % 2).map((n) => n * n).take(5);
console.log(rezultat.toArray());
Rezultat
[ 1, 9, 25, 49, 81 ]
Exemplul 2: Leneș: se calculează doar ce trebuie
map este apelat și pentru 10, care este apoi sărit de drop(1), dar niciodată pentru 40: după două valori, take(2) oprește parcurgerea.
const valori = [10, 20, 30, 40].values().map((x) => {
console.log("calculez", x);
return x / 10;
});
console.log(valori.drop(1).take(2).toArray());
Rezultat
calculez 10
calculez 20
calculez 30
[ 2, 3 ]
Exemplul 3: flatMap pe un Map
const echipe = new Map([["Roșii", ["Ana", "Dan"]], ["Albaștri", ["Ioana"]]]);
console.log(echipe.values().flatMap((membri) => membri).toArray());
Rezultat
[ 'Ana', 'Dan', 'Ioana' ]
Greșeli frecvente
- Aștepți să vezi rezultatul unui iterator fără să-l consumi. Valorile apar doar după
toArray(),for...ofsau altă metodă care parcurge iteratorul.
Comenzi înrudite
Iterator.prototype.toArray / reduce / forEach / some / every / find: Metodele care consumă un iterator și returnează un rezultat: tablou, valoare cumulată, true/false sau elementul găsit.Iterator.from: Transformă orice iterabil sau iterator într-un iterator cu metodele map, filter, take, toArray.map: Creează un tablou nou, transformând fiecare element cu o funcție.