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… of
sløjfen.
Konceptet med protokollen kan opdeles i:
- iterabel
- iterator
Iterabel protokol nævner, at en iterabel skal have Symbol.iterator
nø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… of
slø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… of
slø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: value
og done
.
- værdi
Denvalue
egenskab kan være af enhver datatype og repræsenterer den aktuelle værdi i sekvensen. - gjort
Dendone
egenskab er en boolesk værdi, der angiver, om iteration er færdig eller ej. Hvis iterationen er ufuldstændig, indstillesdone
ejendommen 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 arrIterator
objekt.
- Den
next()
metode returnerer et objekt med to egenskaber:value
ogdone
. - Når
next()
metoden når slutningen af sekvensen, indstillesdone
egenskaben tilfalse
.
Lad os se på, hvordan for… of
loop 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… of
løkke gør præcis det samme som programmet ovenfor.
Den for… of
løkke holder kalde next()
metoden på iterator. Når den når done:true
, for… of
slutter 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 value
og done
ejendom.
- 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
done
ejendommen tiltrue
, medvalue
somundefined
.