V tej vadnici boste s pomočjo primerov spoznali iteratorje in iterable JavaScript.
Iterables in Iterators JavaScript
JavaScript ponuja protokol za ponovitev struktur podatkov. Ta protokol določa, kako se te podatkovne strukture ponavljajo z uporabo for… of
zanke.
Koncept protokola lahko razdelimo na:
- iterable
- iterator
Ponovljivi protokol omenja, da bi moral iterable imeti Symbol.iterator
ključ.
Iterables JavaScript
Podatkovne strukture, ki imajo Symbol.iterator()
metodo, se imenujejo iterables. Na primer polja, nizi, kompleti itd.
Iteratorji JavaScript
Ponavljalec je objekt, ki ga Symbol.iterator()
metoda vrne .
Protokol iteratorja omogoča next()
način dostopa do vsakega elementa iterabilne (podatkovne strukture) enega za drugim.
Oglejmo si primer ponovljivosti 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);
Izhod
Array Iterator () StringIterator ()
Tu klic Symbol.iterator()
metode polja in niza vrne njune iteratorje.
Ponavljajte skozi iterable
Z for… of
zanko lahko pregledujete te ponovljive predmete. Symbol.iterator()
Metodo lahko ponavljate tako:
const number = ( 1, 2, 3); for (let n of number(Symbol.iterator)()) ( console.log(n); )
Izhod
1 2 3
Ali pa lahko preprosto ponovite matriko, kot je ta:
const number = ( 1, 2, 3); for (let n of number) ( console.log(n); )
Tu iterator omogoča, da se for… of
zanka ponovi nad matriko in vrne vsako vrednost.
JavaScript next () Metoda
Objekt iterator ima next()
metodo, ki vrne naslednji element v zaporedju.
next()
Postopek vsebuje dve lastnosti: value
in done
.
- Vrednost lastnost je lahko poljubne vrste podatkov in predstavlja trenutno vrednost v zaporedju.
value
- storiti lastnost je logična vrednost, ki označuje, ali je ponovitev popolna ali ne. Če je ponovitev nepopolna, je lastnost nastavljena na , sicer pa na .
done
done
false
true
Oglejmo si primer ponovitve matrike:
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)
next()
Večkrat lahko pokličete , da se preusmerite po arrIterator
predmetu.
next()
Metoda vrne objekt z dvema lastnostmi:value
indone
.- Ko
next()
metoda doseže konec zaporedja, jedone
lastnost nastavljena nafalse
.
Poglejmo, kako for… of
zanka izvaja zgornji program. Na primer
const arr = ('h', 'e', 'l', 'l', 'o'); for (let i of arr) ( console.log(i); )
Izhod
zdravo
for… of
Zanka pa povsem enako kot program zgoraj.
for… of
Zanka ohranja kliče next()
metodo na iterator. Ko doseže done:true
, se for… of
zanka konča.
Uporabniško določen iterator
Za next()
dostop do naslednjega elementa lahko ustvarite tudi svoj iterator in klic . Na primer
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());
Izhod
(vrednost: "h", storjeno: false) (vrednost: "e", storjeno: false) (vrednost: "l", storjeno: false) (vrednost: "l", storjeno: false) (vrednost: "o" , done: false) (vrednost: undefined, done: true)
V zgornjem programu smo ustvarili svoj lastni iterator. Se displayElements()
vrne value
in done
premoženje.
- Vsakič, ko se
next()
metoda pokliče, se funkcija izvede enkrat in prikaže vrednost matrike. - Končno, ko so vsi elementi matrike izčrpani, je
done
lastnost nastavljena natrue
, zvalue
asundefined
.