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… of
tsükli abil itereeritakse .
Protokolli kontseptsiooni võib jagada järgmiselt:
- iterable
- iteraator
Kordusprotokollis mainitakse, et iterable'il peaks olema Symbol.iterator
võ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… of
Nende 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… of
silmusel 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: value
ja 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 .
done
done
false
true
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:value
jadone
.- Kui
next()
meetod jõuab jada lõppu, määrataksedone
atribuudiks väärtusfalse
.
Vaatame, kuidas for… of
loop 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… of
Loop teeb täpselt sama programmi eespool.
for… of
Loop hoiab helistades next()
meetodit iteraatoris. Kui see on jõudnud done:true
, lõpeb for… of
silmus.
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 value
ja done
vara.
- 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,
done
omadus on märgitudtrue
koosvalue
naguundefined
.