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
Denvalueegenskab kan være af enhver datatype og repræsenterer den aktuelle værdi i sekvensen. - gjort
Dendoneegenskab er en boolesk værdi, der angiver, om iteration er færdig eller ej. Hvis iterationen er ufuldstændig, indstillesdoneejendommen tilfalse, ellers er den indstillet tiltrue.
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:valueogdone. - Når
next()metoden når slutningen af sekvensen, indstillesdoneegenskaben tilfalse.
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 tiltrue, medvaluesomundefined.








