JavaScript Iteratorer og Iterables

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
    for valueegenskapen kan være av en hvilken som helst datatype, og representerer den aktuelle verdi i sekvensen.
  • gjort
    det doneEiendommen er en boolsk verdi som angir om gjentakelsen er fullført eller ikke. Hvis iterasjonen er ufullstendig, donesettes eiendommen til false, ellers er den satt til true.

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: valueog done.
  • Når next()metoden når slutten av sekvensen, blir doneegenskapen satt til false.

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 til true, med valuesom undefined.

Interessante artikler...