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… ofloop.
Konseptet til protokollen kan deles i:
- iterabel
- iterator
Den iterable protokollen nevner at en iterable skal ha Symbol.iteratornø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… oflø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… ofslø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: valueog done.
- verdi
forvalueegenskapen kan være av en hvilken som helst datatype, og representerer den aktuelle verdi i sekvensen. - gjort
detdoneEiendommen er en boolsk verdi som angir om gjentakelsen er fullført eller ikke. Hvis iterasjonen er ufullstendig,donesettes 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 arrIteratorobjekt.
- Den
next()metoden returnerer en gjenstand med to egenskaper:valueogdone. - Når
next()metoden når slutten av sekvensen, blirdoneegenskapen satt tilfalse.
La oss se på hvordan for… ofloop 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… ofløkke gjør nøyaktig det samme som det program ovenfor.
Den for… ofløkke holder ringer i next()fremgangsmåten på iteratoren. Når den når done:true, for… ofslutter 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 valueog doneeiendom.
- 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,
donesettes egenskapen tiltrue, medvaluesomundefined.








