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… of
petlje.
Koncept protokola može se podijeliti na:
- iterabilan
- iterator
Iterabilni protokol spominje da iterabil treba imati Symbol.iterator
ključ.
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… of
petlje 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… of
petlji 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: value
a 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 .
done
done
false
true
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 arrIterator
objekta.
next()
Metoda vraća objekt s dva svojstva:value
adone
.- Kada
next()
metoda dosegne kraj niza, tada sedone
svojstvo postavlja nafalse
.
Pogledajmo kako for… of
petlja izvršava gornji program. Na primjer,
const arr = ('h', 'e', 'l', 'l', 'o'); for (let i of arr) ( console.log(i); )
Izlaz
zdravo
for… of
Petlja radi točno isto kao i program iznad.
for… of
Petlja drži pozivom next()
metode na iteratora. Jednom kad dosegne done:true
, for… of
petlja 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 value
i done
imovine.
- Svaki put kad se
next()
metoda pozove, funkcija se izvršava jednom i prikazuje vrijednost niza. - Konačno, kada su svi elementi niza iscrpljeni,
done
svojstvo se postavlja natrue
, svalue
asundefined
.