JavaScript atkārtotāji un atkārtojamie elementi

Šajā apmācībā jūs uzzināsit par JavaScript iteratoriem un iterables ar piemēru palīdzību.

JavaScript atkārtojamie un atkārtojamie

JavaScript nodrošina protokolu, lai atkārtotu datu struktūras. Šis protokols nosaka, kā šīs datu struktūras tiek atkārtotas, izmantojot for… ofcilpu.

Protokola jēdzienu var sadalīt:

  • atkārtojams
  • atkārtotājs

Atkārtojamā protokolā ir minēts, ka iterējamai jābūt Symbol.iteratoratslēgai.

JavaScript Iterables

Datu struktūras, kurām ir Symbol.iterator()metode, sauc par atkārtojamām. Piemēram, masīvi, virknes, kopas utt.

JavaScript atkārtotāji

Iterators ir objekts, kuru atgriež Symbol.iterator()metode.

Iteratora protokols nodrošina next()metodi, kā piekļūt katram iterējamā elementa (datu struktūras) elementam pa vienam.

Apskatīsim piemēru ar atkārtojamām versijām 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);

Rezultāts

 Masīva Iterator () StringIterator ()

Šeit, izsaucot Symbol.iterator()gan masīva, gan virknes metodi, tiek atgriezti attiecīgie iteratori.

Iterēt caur Iterables

Jūs varat izmantot for… ofcilpu, lai atkārtotu šos atkārtojamos objektus. Jūs varat atkārtot, izmantojot šādu Symbol.iterator()metodi:

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

Rezultāts

 1 2 3

Vai arī varat vienkārši atkārtot masīvu šādi:

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

Šeit iterators ļauj for… ofcilpai atkārtot masīvu un atgriezt katru vērtību.

JavaScript nākamā () metode

Iteratora objektam ir next()metode, kas atgriež nākamo vienumu secībā.

next()Metode satur divas īpašības: valueun done.

  • vērtību Īpašums var būt jebkura datu tipa un atspoguļo pašreizējo vērtību secību.
    value
  • darīts īpašums ir Būla vērtība, kas norāda, vai atkārtojuma ir pilnīgs vai nav. Ja atkārtojums nav pilnīgs, rekvizīts tiek iestatīts uz , citādi tas ir iestatīts uz .
    donedonefalsetrue

Apskatīsim masīvu atkārtojamo piemēru:

 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)

Varat next()atkārtoti zvanīt, lai atkārtotu arrIteratorobjektu.

  • next()Metode atgriež objektu ar divām īpašībām: valueun done.
  • Kad next()metode sasniedz secības beigas, donerekvizīts tiek iestatīts uz false.

Apskatīsim, kā for… ofcikls izpilda iepriekš minēto programmu. Piemēram,

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

Rezultāts

 Sveiki

for… ofCilpa nav tieši tāds pats kā programmas augstāk.

for… ofCilpa saglabā zvanot next()metodi uz iterator. Kad tas sasniedz done:true, for… ofcilpa beidzas.

Lietotāja definēts atkārtotājs

Varat arī izveidot savu iteratoru un piezvanīt, next()lai piekļūtu nākamajam elementam. Piemēram,

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

Rezultāts

 (vērtība: "h", izdarīts: nepatiesa) (vērtība: "e", izdarīts: nepatiesa) (vērtība: "l", izdarīts: nepatiesa) (vērtība: "l", izdarīts: nepatiesa) (vērtība: "o" (darīts: nepatiesi) (vērtība: nedefinēts, izdarīts: patiess)

Iepriekš minētajā programmā mēs esam izveidojuši savu iteratoru. Par displayElements()funkciju atgriežas valueun doneīpašumu.

  • Katru reizi, kad next()tiek izsaukta metode, funkcija tiek izpildīta vienu reizi un parāda masīva vērtību.
  • Visbeidzot, kad visi masīva elementi ir izsmelti, doneīpašums tiek iestatīts uz true, ar valueas undefined.

Interesanti raksti...