JavaScript-iteraattorit ja iterable

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… ofsilmukan avulla.

Protokollan käsite voidaan jakaa:

  • toistettavissa
  • iteraattori

Toistettavassa protokollassa mainitaan, että iteroitavalla pitäisi olla Symbol.iteratoravain.

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… ofsilmukkaa 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… ofsilmukan 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: valueja 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 .
    donedonefalsetrue

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 arrIteratorobjektin toistamiseksi .

  • next()Menetelmä palauttaa objektin kaksi ominaisuudet: valueja done.
  • Kun next()menetelmä on jakson lopussa, doneominaisuudeksi asetetaan false.

Katsotaanpa, kuinka for… ofsilmukka suorittaa yllä olevan ohjelman. Esimerkiksi,

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

Tuotos

 Hei

for… ofSilmukka tekee täsmälleen sama kuin ohjelma edellä.

for… ofSilmukka pitää soittamalla next()menetelmää iteraattori. Kun se saavuttaa done:true, for… ofsilmukka 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 valueja doneomaisuutta.

  • Joka kerta kun next()menetelmää kutsutaan, funktio suoritetaan kerran ja näyttää matriisin arvon.
  • Lopuksi, kun kaikki elementit joukko ovat tyhjiä, doneominaisuus on asetettu true, ja valueniin undefined.

Mielenkiintoisia artikkeleita...