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:valuejadone.- Kui
next()meetod jõuab jada lõppu, määrataksedoneatribuudiks väärtusfalse.
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ärgitudtruekoosvaluenaguundefined.








