Tässä opetusohjelmassa opit JavaScript-iteraattoreista ja iteraaaleista esimerkkien avulla.
JavaScript-itterabilit ja iteraattorit
JavaScript tarjoaa protokollan tietorakenteiden iteroimiseksi. Tämä protokolla määrittää kuinka nämä tietorakenteet toistetaan for… of
silmukan avulla.
Protokollan käsite voidaan jakaa:
- toistettavissa
- iteraattori
Toistettavassa protokollassa mainitaan, että iteroitavalla pitäisi olla Symbol.iterator
avain.
JavaScript Iterables
Tietorakenteita, joilla on Symbol.iterator()
menetelmä, kutsutaan iterableiksi. Esimerkiksi taulukot, merkkijonot, sarjat jne.
JavaScript-iteraattorit
Iteraattori on objekti, jonka Symbol.iterator()
menetelmä palauttaa .
next()
Iteraattoriprotokolla tarjoaa menetelmän iteroitavan (tietorakenteen) jokaisen elementin käyttämiseksi yksi kerrallaan.
Katsotaanpa esimerkkiä iterableilla 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);
Tuotos
Array Iterator () MerkkijonoIterator ()
Tässä Symbol.iterator()
taulukon ja merkkijonon menetelmän kutsuminen palauttaa vastaavat iteraattorit.
Toista iteroitavien kautta
Voit käyttää for… of
silmukkaa iteroimaan näiden iteroitavien objektien läpi. Voit toistaa tämän Symbol.iterator()
menetelmän avulla:
const number = ( 1, 2, 3); for (let n of number(Symbol.iterator)()) ( console.log(n); )
Tuotos
1 2 3
Tai voit yksinkertaisesti toistaa taulukon läpi näin:
const number = ( 1, 2, 3); for (let n of number) ( console.log(n); )
Tässä iteraattori antaa for… of
silmukan iteroida matriisin yli ja palauttaa jokaisen arvon.
JavaScript seuraava () -menetelmä
Iteraattoriobjektilla on next()
menetelmä, joka palauttaa sarjan seuraavan kohteen.
next()
Menetelmä sisältää kaksi ominaisuutta: value
ja done
.
- arvo ominaisuus voi olla mitä tahansa datatyypin ja edustaa nykyisen arvon järjestyksessä.
value
- tehty omaisuus on looginen arvo, joka osoittaa, onko toisto on suoritettu loppuun vai ei. Jos iterointi on keskeneräinen, ominaisuus asetetaan arvoon , muuten se asetetaan arvoon .
done
done
false
true
Katsotaanpa esimerkkiä taulukon iterableista:
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)
Voit soittaa next()
toistuvasti arrIterator
objektin toistamiseksi .
next()
Menetelmä palauttaa objektin kaksi ominaisuudet:value
jadone
.- Kun
next()
menetelmä on jakson lopussa,done
ominaisuudeksi asetetaanfalse
.
Katsotaanpa, kuinka for… of
silmukka suorittaa yllä olevan ohjelman. Esimerkiksi,
const arr = ('h', 'e', 'l', 'l', 'o'); for (let i of arr) ( console.log(i); )
Tuotos
Hei
for… of
Silmukka tekee täsmälleen sama kuin ohjelma edellä.
for… of
Silmukka pitää soittamalla next()
menetelmää iteraattori. Kun se saavuttaa done:true
, for… of
silmukka päättyy.
Käyttäjän määrittämä iteraattori
Voit myös luoda oman iteraattorin ja soittaa next()
päästäksesi seuraavaan elementtiin. Esimerkiksi,
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());
Tuotos
(arvo: "h", tehty: väärä) (arvo: "e", tehty: väärä) (arvo: "l", tehty: väärä) (arvo: "l", tehty: väärä) (arvo: "o" , tehty: väärä) (arvo: määrittelemätön, tehty: tosi)
Edellä olevassa ohjelmassa olemme luoneet oman iteraattorin. displayElements()
Funktio palauttaa value
ja done
omaisuutta.
- Joka kerta kun
next()
menetelmää kutsutaan, funktio suoritetaan kerran ja näyttää matriisin arvon. - Lopuksi, kun kaikki elementit joukko ovat tyhjiä,
done
ominaisuus on asetettutrue
, javalue
niinundefined
.