Nové iterátorové metódy v JavaScripte: funkcionálny a lazy prístup k iterovateľným dátam

30. 6. 2025

Sdílet

JavaScript Autor: Depositphotos

Nový JavaScriptový štandard ES2025 zavádza rozšírené metódy pre iterátory , ktoré umožňujú pohodlnejšie a efektívnejšie spracovanie iterovateľných dát. Toto nové API rozširuje existujúci iterátorový protokol o metódy ako map, filter, take, forEach a ďalšie, ktoré sa aplikujú na každý prvok postupne, na rozdiel od doterajších metód na poliach, ktoré vyhodnocujú všetko naraz.

Nasledujúci zoznam sumarizuje nové metódy iterátorov, ktoré sú dostupné na všetkých iterovateľných objektoch v JavaScripte:

  • filter(callback): Vytvorí nový iterátor, ktorý vracia iba prvky spĺňajúce podmienku v callback funkcii.
  • map(callback): Vytvorí nový iterátor, ktorý vracia prvky transformované pomocou mapovacej funkcie.
  • take(n): Vráti nový iterátor, ktorý poskytne len prvých n prvkov a potom skončí.
  • forEach(callbac­k): Spustí callback funkciu pre každý prvok iterátora bez vytvárania nového iterátora.
  • find(callback): Vracia prvý prvok, ktorý vyhovuje podmienke v callback funkcii, alebo undefined, ak žiadny nevyhovuje.
  • drop(n): Vytvorí nový iterátor, ktorý preskočí prvých n prvkov pôvodného iterátora.
  • flatMap(callbac­k): Mapuje každý prvok na iterovateľný objekt a výsledky splošťuje do jedného iterátora.
  • reduce(callback, initialValue): Agreguje prvky iterátora do jednej hodnoty pomocou redukčnej funkcie.
  • some(callback): Testuje, či aspoň jeden prvok spĺňa podmienku, vracia true alebo false.
  • every(callback): Testuje, či všetky prvky spĺňajú podmienku, vracia true alebo false.
  • toArray(): Vytvorí pole obsahujúce všetky prvky iterátora.

Doteraz JavaScript ponúkal iterátory napríklad prostredníctvom metód values, keys a entries na poliach, množinách či mapách. Tieto iterátory však nepodporovali funkcionálne metódy na transformáciu alebo filtrovanie dát priamo na iterátoroch, ale iba na poliach (napr. Array.prototy­pe.filter). To znamenalo, že ak ste chceli použiť takéto metódy na iterovateľných objektoch, museli ste ich najprv konvertovať na pole, čo je neefektívne a znemožňuje spracovanie nekonečných alebo veľmi veľkých dátových zdrojov.

Príklad použitia:

// calculate top 3 salaries from the list
// using Iterator methods
let salaries = [3200, -1350, 990, 0, 1202022, 1230, 1230, 9900, 4560, 7780, 2120, 2]
salaries.sort((a, b) => b - a)

salaries.values()
  .filter(e => e > 100 && e < 10_000)
  .take(3)
  .forEach(e => console.log(e))

// Example of using Iterator methods to process an array of words
// This example will trim whitespace, convert to lowercase, and filter out empty strings
let words = ['apple\n', ' Banana', ' ', 'cheRry', 'Date', '\t\t', ' elderberry', 'fig', 'grape']

words.values()
  .map(word => word.trim().toLowerCase())
  .filter(word => word.length > 0)
  .forEach(word => console.log(word))

// Example of using Iterator methods to filter and process a Set of numbers
let vals = new Set([-1, 22, -3, 14, 5, 61]);
vals.values().filter(e => e > 0).forEach(e => console.log(e))

Nové API teda prináša funkcionálny štýl práce s iterátormi, ktorý je „lenivý“ (lazy) a umožňuje spracovanie dát priamo počas iterácie, na rozdiel od „dychtivých“ (eager) metód polí, ktoré vyhodnocujú všetky prvky naraz. Toto zlepšuje výkon a rozširuje možnosti práce s iterovateľnými dátami v JavaScripte.

JavaScript mal, samozrejme, takúto funkcionalitu dostupnú napr. vo vynikajúcej knižnici Ramda, teraz sa však stáva natívnou súčasťou samotného jazyka.

Tato zprávička byla zaslána čtenářem serveru Root.cz pomocí formuláře Přidat zprávičku. Děkujeme!

Našli jste v článku chybu?

Autor zprávičky