Ebben az oktatóanyagban példák segítségével megismerheti a JavaScript iterátorait és iterable programjait.
JavaScript Iterables és Iterators
A JavaScript protokollt biztosít az adatszerkezetek feletti ismétléshez. Ez a protokoll meghatározza, hogy ezek az adatstruktúrák hogyan vannak iterálva a for… of
hurok használatával.
A protokoll koncepciója felosztható:
- iterálható
- iterátor
Az iterálható protokoll megemlíti, hogy az iterable-nek legyen Symbol.iterator
kulcsa.
JavaScript Iterables
A Symbol.iterator()
metódussal rendelkező adatstruktúrákat iterable-nek nevezzük. Például tömbök, húrok, halmazok stb.
JavaScript Iterátorok
Az iterátor olyan objektum, amelyet a Symbol.iterator()
módszer visszaad .
Az iterátor protokoll biztosítja az next()
iterálható elemek (adatstruktúra) egyes elemeinek elérési módját.
Nézzünk meg egy példát az iterable-eknek 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);
Kimenet
Array Iterator () StringIterator ()
Itt Symbol.iterator()
a tömb és a string metódusának meghívása megadja a megfelelő iterátorokat.
Iterálható az iterable-k révén
A for… of
hurok segítségével iterálhat ezeken az iterálható objektumokon. Az alábbi Symbol.iterator()
módszerrel iterálhat :
const number = ( 1, 2, 3); for (let n of number(Symbol.iterator)()) ( console.log(n); )
Kimenet
1 2 3
Vagy egyszerűen iterálhat a tömbön, így:
const number = ( 1, 2, 3); for (let n of number) ( console.log(n); )
Itt az iterátor lehetővé teszi, hogy a for… of
hurok egy tömb fölött iteráljon, és minden értéket visszaadjon.
JavaScript next () módszer
Az iterátor objektumnak van egy next()
metódusa, amely a sorozat következő elemét adja vissza.
A next()
módszer két tulajdonságot tartalmaz: value
és done
.
- érték
Avalue
tulajdonság bármilyen adattípusú lehet, és a sorozat aktuális értékét képviseli. - kész
Adone
tulajdonság egy logikai érték, amely jelzi, hogy az iteráció teljes-e vagy sem. Ha az iteráció nem teljes, akkor adone
tulajdonság értékefalse
, máskülönben értéketrue
.
Nézzünk meg egy tömb iterable példát:
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)
next()
Többször is felhívhatja az arrIterator
objektumot.
- A
next()
metódus két tulajdonságú objektumot ad vissza:value
ésdone
. - Amikor a
next()
módszer a végére ér a sorozat, akkor adone
tulajdonság értékefalse
.
Nézzük meg, hogy a for… of
ciklus hogyan hajtja végre a fenti programot. Például,
const arr = ('h', 'e', 'l', 'l', 'o'); for (let i of arr) ( console.log(i); )
Kimenet
Szia
A for… of
ciklus pontosan ugyanazt csinálja, mint a fenti program.
A for… of
ciklus folyamatosan hívja a next()
metódust az iterátoron. Amint eléri done:true
, a for… of
hurok véget ér.
Felhasználó által definiált Iterator
Létrehozhat saját iterátort és hívást next()
is a következő elem eléréséhez. Például,
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());
Kimenet
(érték: "h", kész: hamis) (érték: "e", kész: hamis) (érték: "l", kész: hamis) (érték: "l", kész: hamis) (érték: "o" , kész: hamis) (érték: nem definiált, kész: igaz)
A fenti programban létrehoztuk saját iterátorunkat. A displayElements()
függvény visszatér value
és done
tulajdonság.
- A
next()
metódus minden egyes meghívásakor a függvény egyszer végrehajtásra kerül, és megjeleníti egy tömb értékét. - Végül, ha egy tömb összes eleme kimerült, akkor a
done
tulajdonság értéketrue
:value
asundefined
.