JavaScript-Iteratorer og Iterables

I denne vejledning lærer du om JavaScript-iteratorer og iterables ved hjælp af eksempler.

JavaScript-gentagelser og gentagelser

JavaScript giver en protokol til iterering over datastrukturer. Denne protokol definerer, hvordan disse datastrukturer gentages ved hjælp af for… ofsløjfen.

Konceptet med protokollen kan opdeles i:

  • iterabel
  • iterator

Iterabel protokol nævner, at en iterabel skal have Symbol.iteratornøglen.

JavaScript-gengivelser

Datastrukturer, der har Symbol.iterator()metoden, kaldes iterables. For eksempel Arrays, Strings, Sets osv.

Javascript JavaScript

En iterator er et objekt, der returneres ved hjælp af Symbol.iterator()metoden.

Iteratorprotokollen giver next()metoden til at få adgang til hvert element i iterabelen (datastruktur) en ad gangen.

Lad os 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);

Produktion

 Array Iterator () StringIterator ()

Her Symbol.iterator()returnerer kalder metoden til både arrayet og strengen deres respektive iteratorer.

Iterere gennem Iterables

Du kan bruge for… ofsløjfen til at gentage gennem disse iterable objekter. Du kan gentage gennem Symbol.iterator()metoden på denne måde:

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

Produktion

 1 2 3

Eller du kan simpelthen gentage gennem arrayet på denne måde:

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

Her tillader iteratoren, at for… ofsløjfen gentages over en matrix og returnerer hver værdi.

JavaScript næste () Metode

Iteratorobjektet har en next()metode, der returnerer det næste element i sekvensen.

Den next()metode indeholder to egenskaber: valueog done.

  • værdi
    Den valueegenskab kan være af enhver datatype og repræsenterer den aktuelle værdi i sekvensen.
  • gjort
    Den doneegenskab er en boolesk værdi, der angiver, om iteration er færdig eller ej. Hvis iterationen er ufuldstændig, indstilles doneejendommen til false, ellers er den indstillet til true.

Lad os se på et eksempel på array-iterables:

 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()gentagne gange for at gentage et arrIteratorobjekt.

  • Den next()metode returnerer et objekt med to egenskaber: valueog done.
  • Når next()metoden når slutningen af ​​sekvensen, indstilles doneegenskaben til false.

Lad os se på, hvordan for… ofloop udfører ovenstående program. For eksempel,

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

Produktion

 Hej

Den for… ofløkke gør præcis det samme som programmet ovenfor.

Den for… ofløkke holder kalde next()metoden på iterator. Når den når done:true, for… ofslutter sløjfen.

Brugerdefineret Iterator

Du kan også oprette din egen iterator og ringe next()til for at få adgang til det næste 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());

Produktion

 (værdi: "h", done: false) (værdi: "e", done: false) (værdi: "l", done: false) (værdi: "l", done: false) (værdi: "o" , done: false) (værdi: udefineret, done: true)

I ovenstående program har vi oprettet vores egen iterator. De displayElements()funktion returnerer valueog doneejendom.

  • Hver gang next()metoden kaldes, udføres funktionen en gang og viser værdien af ​​en matrix.
  • Endelig, når alle elementerne i en matrix er opbrugt, indstilles doneejendommen til true, med valuesom undefined.

Interessante artikler...