I denne veiledningen vil du lære om JavaScript iteratorer og iterables ved hjelp av eksempler.
JavaScript Iterables og Iterators
JavaScript gir en protokoll for å itere over datastrukturer. Denne protokollen definerer hvordan disse datastrukturene gjentas ved bruk av for… of
loop.
Konseptet til protokollen kan deles i:
- iterabel
- iterator
Den iterable protokollen nevner at en iterable skal ha Symbol.iterator
nøkkelen.
Javascript for JavaScript
Datastrukturene som har Symbol.iterator()
metoden kalles iterables. For eksempel Arrays, Strings, Sets, etc.
JavaScript Iteratorer
En iterator er et objekt som returneres etter Symbol.iterator()
metoden.
Iteratorprotokollen gir next()
metoden for å få tilgang til hvert element i iterable (datastruktur) en om gangen.
La oss se på et eksempel på at iterables har 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);
Produksjon
Array Iterator () StringIterator ()
Her kaller Symbol.iterator()
metoden til både matrisen og strengen sine respektive iteratorer.
Iterere gjennom Iterables
Du kan bruke for… of
løkken til å gjenta gjennom disse iterable objektene. Du kan gjenta gjennom Symbol.iterator()
metoden slik:
const number = ( 1, 2, 3); for (let n of number(Symbol.iterator)()) ( console.log(n); )
Produksjon
1 2 3
Eller du kan bare gjenta det gjennom matrisen slik:
const number = ( 1, 2, 3); for (let n of number) ( console.log(n); )
Her lar iteratoren for… of
sløyfen gjentas over en matrise og returnere hver verdi.
JavaScript neste () Metode
Iteratorobjektet har en next()
metode som returnerer neste element i sekvensen.
Den next()
metode inneholder to egenskaper: value
og done
.
- verdi
forvalue
egenskapen kan være av en hvilken som helst datatype, og representerer den aktuelle verdi i sekvensen. - gjort
detdone
Eiendommen er en boolsk verdi som angir om gjentakelsen er fullført eller ikke. Hvis iterasjonen er ufullstendig,done
settes eiendommen tilfalse
, ellers er den satt tiltrue
.
La oss se på et eksempel på matrixerabler:
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)
Du kan ringe next()
gjentatte ganger for å gjenta over et arrIterator
objekt.
- Den
next()
metoden returnerer en gjenstand med to egenskaper:value
ogdone
. - Når
next()
metoden når slutten av sekvensen, blirdone
egenskapen satt tilfalse
.
La oss se på hvordan for… of
loop utfører programmet ovenfor. For eksempel,
const arr = ('h', 'e', 'l', 'l', 'o'); for (let i of arr) ( console.log(i); )
Produksjon
Hallo
Den for… of
løkke gjør nøyaktig det samme som det program ovenfor.
Den for… of
løkke holder ringer i next()
fremgangsmåten på iteratoren. Når den når done:true
, for… of
slutter sløyfen.
Brukerdefinert Iterator
Du kan også lage din egen iterator og ringe for next()
å få tilgang til neste element. For eksempel,
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());
Produksjon
(verdi: "h", done: false) (verdi: "e", done: false) (verdi: "l", done: false) (verdi: "l", done: false) (verdi: "o" , done: false) (verdi: udefinert, done: true)
I programmet ovenfor har vi laget vår egen iterator. Den displayElements()
funksjonen returnerer value
og done
eiendom.
- Hver gang
next()
metoden kalles, blir funksjonen utført en gang og viser verdien til en matrise. - Til slutt, når alle elementene i en matrise er oppbrukt,
done
settes egenskapen tiltrue
, medvalue
somundefined
.