Iterator.prototype.map / filter / take / drop / flatMap în JavaScript

Iteratori ES2025

Transformă, filtrează și limitează valorile unui iterator „leneș”, fără să creeze tablouri intermediare.

Sintaxă
iterator.map(functie)
iterator.filter(functie)
iterator.take(n)
iterator.drop(n)
iterator.flatMap(functie)

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...of sau altă metodă care parcurge iteratorul.

Comenzi înrudite