Iteratorji JavaScript in iterables

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… ofzanke.

Koncept protokola lahko razdelimo na:

  • iterable
  • iterator

Ponovljivi protokol omenja, da bi moral iterable imeti Symbol.iteratorključ.

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… ofzanko 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… ofzanka 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: valuein 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 .
    donedonefalsetrue

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 arrIteratorpredmetu.

  • next()Metoda vrne objekt z dvema lastnostmi: valuein done.
  • Ko next()metoda doseže konec zaporedja, je donelastnost nastavljena na false.

Poglejmo, kako for… ofzanka izvaja zgornji program. Na primer

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

Izhod

 zdravo

for… ofZanka pa povsem enako kot program zgoraj.

for… ofZanka ohranja kliče next()metodo na iterator. Ko doseže done:true, se for… ofzanka 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 valuein donepremož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 donelastnost nastavljena na true, z valueas undefined.

Zanimive Članki...