JavaScript itterátorok és iterálhatók

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… ofhurok használatával.

A protokoll koncepciója felosztható:

  • iterálható
  • iterátor

Az iterálható protokoll megemlíti, hogy az iterable-nek legyen Symbol.iteratorkulcsa.

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… ofhurok 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… ofhurok 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
    A valuetulajdonság bármilyen adattípusú lehet, és a sorozat aktuális értékét képviseli.
  • kész
    A donetulajdonság egy logikai érték, amely jelzi, hogy az iteráció teljes-e vagy sem. Ha az iteráció nem teljes, akkor a donetulajdonság értéke false, máskülönben értéke true.

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 arrIteratorobjektumot.

  • A next()metódus két tulajdonságú objektumot ad vissza: valueés done.
  • Amikor a next()módszer a végére ér a sorozat, akkor a donetulajdonság értéke false.

Nézzük meg, hogy a for… ofciklus 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… ofciklus pontosan ugyanazt csinálja, mint a fenti program.

A for… ofciklus folyamatosan hívja a next()metódust az iterátoron. Amint eléri done:true, a for… ofhurok 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 donetulajdonsá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 donetulajdonság értéke true: valueas undefined.

érdekes cikkek...