Iterátory a Iterátory JavaScriptu

V tomto výučbe sa pomocou príkladov dozviete o iterátoroch a iterátoroch JavaScriptu.

Iterable a JavaScript iterátory

JavaScript poskytuje protokol na iteráciu nad dátovými štruktúrami. Tento protokol definuje, ako sú tieto dátové štruktúry iterované pomocou for… ofslučky.

Koncept protokolu možno rozdeliť na:

  • iterovateľný
  • iterátor

V iterovateľnom protokole sa uvádza, že iterovateľný kľúč by mal mať Symbol.iteratorkľúč.

Tabuľky jazyka JavaScript

Dátové štruktúry, ktoré majú Symbol.iterator()metódu, sa nazývajú iterovateľné. Napríklad polia, reťazce, sady atď.

Iterátory JavaScriptu

Iterátor je objekt, ktorý je vrátený Symbol.iterator()metódou.

Iterátorový protokol poskytuje next()metódu prístupu ku každému prvku iterovateľnej (dátovej štruktúre) po jednom.

Pozrime sa na príklad, ktorý má iterable Symbol.Iterator()

 const arr = (1, 2 ,3); // calling the Symbol.iterator() method const arrIterator = arr(Symbol.iterator)(); // gives Array Iterator console.log(arrIterator); const str = 'hello'; // calling the Symbol.iterator() method const strIterator = str(Symbol.iterator)(); // gives String Iterator console.log(strIterator);

Výkon

 Array Iterator () StringIterator ()

Tu volanie Symbol.iterator()metódy poľa aj reťazca vráti ich príslušné iterátory.

Iterovať cez Iterables

for… ofSlučku môžete použiť na iteráciu týmito opakovateľnými objektmi. Môžete iterovať touto Symbol.iterator()metódou:

 const number = ( 1, 2, 3); for (let n of number(Symbol.iterator)()) ( console.log(n); )

Výkon

 1 2 3

Alebo môžete jednoducho iterovať cez pole takto:

 const number = ( 1, 2, 3); for (let n of number) ( console.log(n); )

Tu iterátor umožňuje for… ofslučke iterovať cez pole a vrátiť každú hodnotu.

Metóda next () JavaScript

Objekt iterátora má next()metódu, ktorá vracia nasledujúcu položku v poradí.

next()Spôsob obsahuje dve vlastnosti: valuea done.

  • Hodnota vlastnosť môže byť akéhokoľvek typu dát a predstavuje aktuálnu hodnotu v sekvencii.
    value
  • vykonané vlastnosť je logická hodnota, ktorá označuje, či je iterácie dokončená alebo nie. Ak je iterácia neúplná, vlastnosť je nastavená na , inak je nastavená na .
    donedonefalsetrue

Pozrime sa na príklad iterovateľných súborov poľa:

 const arr = ('h', 'e', 'l', 'l', 'o'); let arrIterator = arr(Symbol.iterator)(); console.log(arrIterator.next()); // (value: "h", done: false) console.log(arrIterator.next()); // (value: "e", done: false) console.log(arrIterator.next()); // (value: "l", done: false) console.log(arrIterator.next()); // (value: "l", done: false) console.log(arrIterator.next()); // (value: "o", done: false) console.log(arrIterator.next()); // (value: undefined, done: true)

Môžete next()opakovane volať a iterovať cez arrIteratorobjekt.

  • next()Metóda vráti objekt s dvoma vlastnosťami: valuea done.
  • Keď next()metóda dosiahne koniec sekvencie, potom je donevlastnosť nastavená na false.

Pozrime sa, ako for… ofslučka vykonáva vyššie uvedený program. Napríklad,

 const arr = ('h', 'e', 'l', 'l', 'o'); for (let i of arr) ( console.log(i); )

Výkon

 Ahoj

for… ofSlučka robí presne rovnaký ako v prípade programu vyššie.

for… ofSlučky udržiava volanie next()metódy na Iterator. Akonáhle dosiahne done:true, for… ofslučka sa ukončí.

Užívateľom definovaný iterátor

Môžete si tiež vytvoriť vlastný iterátor a zavolať next()na prístup k ďalšiemu prvku. Napríklad,

 function displayElements(arr) ( // to update the iteration let n = 0; return ( // implementing the next() function next() ( if(n < arr.length) ( return ( value: arr(n++), done: false ) ) return ( value: undefined, done: true ) ) ) ) const arr = ('h', 'e', 'l', 'l', 'o'); const arrIterator = displayElements(arr); console.log(arrIterator.next()); console.log(arrIterator.next()); console.log(arrIterator.next()); console.log(arrIterator.next()); console.log(arrIterator.next()); console.log(arrIterator.next());

Výkon

 (hodnota: "h", hotovo: nepravda) (hodnota: "e", hotovo: nepravda) (hodnota: "l", hotovo: nepravda) (hodnota: "l", hotovo: nepravda) (hodnota: "o" , done: false) (hodnota: nedefinované, done: true)

Vo vyššie uvedenom programe sme vytvorili vlastný iterátor. Tieto displayElements()funkcie vráti valuea donenehnuteľnosť.

  • Pri každom next()zavolaní metódy sa funkcia vykoná raz a zobrazí hodnotu poľa.
  • Nakoniec, keď sú vyčerpané všetky prvky poľa, je donevlastnosť nastavená na true, s valueako undefined.

Zaujímavé články...