JavaScripti iteraatorid ja korduvad

Selles õpetuses saate näidete abil õppida JavaScripti iteraatoreid ja iterableid.

JavaScripti itteraadid ja iteraatorid

JavaScript pakub andmestruktuuride kordamiseks protokolli. See protokoll määratleb, kuidas neid andmestruktuure for… oftsükli abil itereeritakse .

Protokolli kontseptsiooni võib jagada järgmiselt:

  • iterable
  • iteraator

Kordusprotokollis mainitakse, et iterable'il peaks olema Symbol.iteratorvõti.

JavaScripti itterables

Andmestruktuure, millel on Symbol.iterator()meetod, nimetatakse korduvaks. Näiteks massiivid, stringid, komplektid jne.

JavaScripti iteraatorid

Iteraator on objekt, mille Symbol.iterator()meetod tagastab .

Iteraatoriprotokoll pakub next()meetodi iterable (andmestruktuuri) igale elemendile juurde pääsemiseks ükshaaval.

Vaatame korduvvariantide näidet 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);

Väljund

 Massiivi itaator () StringIterator ()

Siin Symbol.iterator()tagastab nii massiivi kui ka stringi meetodi kutsumine nende vastavad iteraatorid.

Korduvad läbi korduvate

for… ofNende itereeruvate objektide itereerimiseks saate kasutada silmust. Teil on võimalik korrata sellist Symbol.iterator()meetodit:

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

Väljund

 1 2 3

Või saate massiivi kaudu lihtsalt kordada järgmiselt:

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

Siin lubab iteraator for… ofsilmusel massiivi kohal korduda ja iga väärtuse tagastada.

JavaScripti next () meetod

Iteraatori objektil on next()meetod, mis tagastab järjestuse järgmise üksuse.

next()Meetod sisaldab kahte omadust: valueja done.

  • raha vara võib olla mis tahes andmed tüüp ja esindab praegune väärtus jada.
    value
  • teha vara on tõeväärtus, mis näitab, kas iteratsiooni on täielik või mitte. Kui iteratsioon on puudulik, määratakse atribuudiks väärtus , muul juhul seatakse väärtuseks .
    donedonefalsetrue

Vaatame massiivi iterable'i näidet:

 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)

Objekti next()kordamiseks võite helistada korduvalt arrIterator.

  • next()Meetod tagastab objekti kaks omadused: valueja done.
  • Kui next()meetod jõuab jada lõppu, määratakse doneatribuudiks väärtus false.

Vaatame, kuidas for… ofloop täidab ülaltoodud programmi. Näiteks,

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

Väljund

 Tere

for… ofLoop teeb täpselt sama programmi eespool.

for… ofLoop hoiab helistades next()meetodit iteraatoris. Kui see on jõudnud done:true, lõpeb for… ofsilmus.

Kasutaja määratletud iteraator

next()Järgmisele elemendile juurdepääsemiseks võite luua ka oma iteraatori ja helistada . Näiteks,

 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());

Väljund

 (väärtus: "h", valmis: vale) (väärtus: "e", tehtud: vale) (väärtus: "l", tehtud: vale) (väärtus: "l", tehtud: vale) (väärtus: "o" , tehtud: vale) (väärtus: määratlemata, tehtud: tõene)

Ülaltoodud programmis oleme loonud oma iteraatori. displayElements()Tagastab funktsioon valueja donevara.

  • Iga kord, kui next()meetodit kutsutakse, käivitatakse funktsioon üks kord ja kuvatakse massiivi väärtus.
  • Lõpuks, kui kõik massiivi elemendid on ammendatud, doneomadus on märgitud truekoos valuenagu undefined.

Huvitavad Artiklid...