JavaScript Iteratori i Iterables

U ovom ćete tutorijalu uz primjere naučiti o JavaScript iteratorima i iterabilima.

JavaScript kompatibilni i iteratori

JavaScript pruža protokol za itiranje preko struktura podataka. Ovaj protokol definira kako se te strukture podataka ponavljaju pomoću for… ofpetlje.

Koncept protokola može se podijeliti na:

  • iterabilan
  • iterator

Iterabilni protokol spominje da iterabil treba imati Symbol.iteratorključ.

JavaScript kompatibilni

Strukture podataka koje imaju Symbol.iterator()metodu nazivaju se iterables. Na primjer, nizovi, žice, skupovi itd.

JavaScript Iteratori

Iterator je objekt koji se vraća Symbol.iterator()metodom.

Iteracijski protokol pruža next()metodu za pristup svakom elementu iterabilne (strukture podataka) jedan po jedan.

Pogledajmo primjer posjedovanja iterablea 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);

Izlaz

 Iterator niza () StringIterator ()

Ovdje pozivanje Symbol.iterator()metode niza i niza vraća njihove odgovarajuće iteratore.

Ponavljajte kroz interaktivne stvari

Pomoću for… ofpetlje možete prelaziti kroz ove iterabilne objekte. Možete ponoviti Symbol.iterator()metodu ovako:

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

Izlaz

 1 2 3

Ili možete jednostavno prelistati niz poput ovog:

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

Ovdje iterator omogućuje for… ofpetlji ponavljanje niza i vraćanje svake vrijednosti.

JavaScript next () metoda

Objekt iteratora ima next()metodu koja vraća sljedeću stavku u nizu.

next()Metoda sadrži dva svojstva: valuea done.

  • vrijednost svojstvo može biti bilo koje vrste podataka i predstavlja trenutnu vrijednost u nizu.
    value
  • učinio Nekretnina je boolean vrijednost koja označava je li iteracija završi ili ne. Ako je iteracija nepotpuna, svojstvo se postavlja na , inače se postavlja na .
    donedonefalsetrue

Pogledajmo primjer iterable niza:

 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)

Možete next()ponavljati poziv za ponavljanje arrIteratorobjekta.

  • next()Metoda vraća objekt s dva svojstva: valuea done.
  • Kada next()metoda dosegne kraj niza, tada se donesvojstvo postavlja na false.

Pogledajmo kako for… ofpetlja izvršava gornji program. Na primjer,

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

Izlaz

 zdravo

for… ofPetlja radi točno isto kao i program iznad.

for… ofPetlja drži pozivom next()metode na iteratora. Jednom kad dosegne done:true, for… ofpetlja se prekida.

Korisnički definirani iterator

Također možete stvoriti vlastiti iterator i poziv next()za pristup sljedećem elementu. Na primjer,

 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());

Izlaz

 (vrijednost: "h", gotovo: false) (vrijednost: "e", gotovo: false) (vrijednost: "l", gotovo: false) (vrijednost: "l", gotovo: false) (vrijednost: "o" , done: false) (vrijednost: undefined, done: true)

U gore navedenom programu stvorili smo vlastiti iterator. Na displayElements()funkcija vraća valuei doneimovine.

  • Svaki put kad se next()metoda pozove, funkcija se izvršava jednom i prikazuje vrijednost niza.
  • Konačno, kada su svi elementi niza iscrpljeni, donesvojstvo se postavlja na true, s valueas undefined.

Zanimljivi članci...