„JavaScript“ iteratoriai ir iteratoriai

Šioje pamokoje, naudodamiesi pavyzdžiais, sužinosite apie „JavaScript“ iteratorius ir kartojamas versijas.

„JavaScript Iterables“ ir „Iterators“

„JavaScript“ pateikia protokolą duomenų struktūroms pakartoti. Šis protokolas apibrėžia, kaip šios duomenų struktūros kartojamos naudojant for… ofkilpą.

Protokolo koncepciją galima suskirstyti į:

  • pasikartojantis
  • iteratorius

„Iterable“ protokole minima, kad iterable turėtų turėti Symbol.iteratorraktą.

„JavaScript Iterables“

Duomenų struktūros, turinčios Symbol.iterator()metodą, vadinamos iterable. Pavyzdžiui, masyvai, eilutės, rinkiniai ir kt.

„JavaScript Iterators“

Iteratorius yra objektas, kurį grąžina Symbol.iterator()metodas.

„Iterator“ protokolas pateikia next()metodą, kaip prieiti prie kiekvieno iteruojamo elemento (duomenų struktūros) po vieną.

Pažvelkime į kartotinių pavyzdžių 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);

Rezultatas

 Masyvo iteratorius () StringIterator ()

Čia iškvietus Symbol.iterator()masyvo ir eilutės metodą, bus grąžinti atitinkami iteratoriai.

Kartoti per pasikartojančius

Galite naudoti for… ofkilpą kartodami šiuos kartojamus objektus. Galite kartoti naudodamiesi tokiu Symbol.iterator()metodu:

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

Rezultatas

 1 2 3

Arba galite tiesiog pakartoti masyvą taip:

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

Čia iteratorius leidžia for… ofkilpai kartoti masyvą ir grąžinti kiekvieną vertę.

„JavaScript next“ () metodas

Iteratoriaus objekte yra next()metodas, kuris grąžina kitą elementą sekoje.

next()Metodas yra dvi savybes: valueir done.

  • vertė savybė gali būti bet kokios duomenų tipas ir yra dabartinės vertę sekoje.
    value
  • padaryta nuosavybė yra Būlio vertė, kuri rodo, ar iteracijos yra baigtas, ar ne. Jei iteracija yra nebaigta, ypatybė nustatyta kaip „ kita“ .
    donedonefalsetrue

Pažvelkime į masyvo pakartojimų pavyzdį:

 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)

Norėdami next()pakartoti arrIteratorobjektą, galite skambinti pakartotinai .

  • next()Metodas grąžina su dviem savybių objektą: valueir done.
  • Kai next()metodas pasiekia sekos pabaigą, tada donesavybė nustatoma į false.

Pažvelkime, kaip for… ofciklas vykdo pirmiau nurodytą programą. Pavyzdžiui,

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

Rezultatas

 Sveiki

for… ofKilpa daro lygiai tą patį, kaip nurodyta pirmiau programą.

for… ofKilpa išlaiko paskambinę next()metodą ant Iterator. Pasiekus done:true, for… ofkilpa baigiasi.

Vartotojo apibrėžtas kartotuvas

Taip pat galite sukurti savo iteratorių ir paskambinti, next()kad pasiektumėte kitą elementą. Pavyzdžiui,

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

Rezultatas

 (reikšmė: "h", padaryta: klaidinga) (reikšmė: "e", padaryta: klaidinga) (reikšmė: "l", padaryta: klaidinga) (reikšmė: "l", padaryta: klaidinga) (reikšmė: "o" , padaryta: klaidinga) (vertė: neapibrėžta, padaryta: tiesa)

Pirmiau pateiktoje programoje mes sukūrėme savo iteratorių. Į displayElements()funkcija grąžina valueir donenuosavybė.

  • Kiekvieną kartą, kai next()iškviečiamas metodas, funkcija vykdoma vieną kartą ir parodo masyvo vertę.
  • Galiausiai, kai visi masyvo elementai yra išnaudoti, nustatoma donenuosavybė truesu valueas undefined.

Įdomios straipsniai...