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… of
sluč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.iterator
kľúč.
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… of
Sluč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… of
sluč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: value
a 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 .
done
done
false
true
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 arrIterator
objekt.
next()
Metóda vráti objekt s dvoma vlastnosťami:value
adone
.- Keď
next()
metóda dosiahne koniec sekvencie, potom jedone
vlastnosť nastavená nafalse
.
Pozrime sa, ako for… of
sluč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… of
Slučka robí presne rovnaký ako v prípade programu vyššie.
for… of
Slučky udržiava volanie next()
metódy na Iterator. Akonáhle dosiahne done:true
, for… of
sluč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 value
a done
nehnuteľ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
done
vlastnosť nastavená natrue
, svalue
akoundefined
.