ES2024 Iterator Helpers (map, filter, take, drop pe Iteratori) în JavaScript

Iteratori ECMAScript 2024

Noutatea din ECMAScript 2024: metode de transformare directă pe iteratori fără conversie la tablou prin .map(), .filter(), .take() și .drop().

Sintaxă
iterator.map(x => x * 2).filter(x => x > 10).take(5);

În specificația ECMAScript 2024, JavaScript a adăugat Iterator Helpers: un set de metode native de transformare directă (precum map, filter, take, drop) care pot fi apelate direct pe orice iterator sau generator, fără a mai fi nevoie să convertești colecția într-un tablou complet prin Array.from() sau spread [...iterator].

Principalul beneficiu este eficiența extremă a memoriei: transformările sunt evaluate leneș (lazy), element cu element, permițând procesarea seturilor masive de date fără a aloca tablouri intermediare temporare în RAM.

Exemplu: Lanț de procesare pe un Set cu Iterator Helpers
// 1. O colecție Map sau Set cu mii de elemente
const numereUnice = new Set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);

// 2. Extragem iteratorul folosind noul standard Iterator Helpers
const rezultat = numereUnice.values()
    // Dublăm fiecare valoare fără a aloca un tablou intermediar:
    .map(n => n * 2)
    // Păstrăm doar numerele strict mai mari de 6:
    .filter(n => n > 6)
    // Sărim peste primele 2 elemente:
    .drop(2)
    // Preluăm doar următoarele 2 elemente:
    .take(2);

// 3. Consumăm rezultatul doar când avem nevoie
for (const val of rezultat) {
    console.log(val); // 12, 14
}

// Conversie finală directă în tablou printr-o singură metodă curată:
// const tablouFinal = rezultat.toArray();

Principalele Metode din Iterator Helpers

  • .map(fn) — Transformă elementele pe măsură ce sunt parcurse.
  • .filter(fn) — Filtrează elementele pe flux fără stocare în memorie.
  • .take(limit) — Oprește iteratorul după un număr fix de elemente (esențial pe secvențe infinite!).
  • .drop(count) — Ignoră primele count elemente din flux.
  • .toArray() — Convertește iteratorul final într-un tablou JavaScript standard.