ЈаваСцрипт Итератори и Итераблес

У овом упутству ћете научити о ЈаваСцрипт итераторима и итерабилима уз помоћ примера.

ЈаваСцрипт компатибилни и итератори

ЈаваСцрипт пружа протокол за итирање преко структура података. Овај протокол дефинише како се ове структуре података понављају помоћу for… ofпетље.

Концепт протокола може се подијелити на:

  • итерабле
  • итератор

Поновљиви протокол помиње да итерабил треба да има Symbol.iteratorкључ.

ЈаваСцрипт компатибилни

Структуре података које имају Symbol.iterator()методу називају се итерабилима. На пример, низови, низови, скупови итд.

ЈаваСцрипт итератори

Итератор је објекат који се враћа Symbol.iterator()методом.

Итерацијски протокол пружа next()метод за приступ сваком елементу итерабилне (структуре података) један по један.

Погледајмо пример посједовања итераблеа 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);

Оутпут

 Арраи Итератор () СтрингИтератор ()

Овде позивање Symbol.iterator()методе низа и низа враћа њихове одговарајуће итераторе.

Понављајте кроз интерактивне ствари

Помоћу for… ofпетље можете да прелазите кроз ове итерабилне објекте. Можете поновити Symbol.iterator()методу на следећи начин:

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

Оутпут

 1 2 3

Или можете једноставно прелистати низ овако:

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

Овде итератор омогућава for… ofпетљи да прелази низ и враћа сваку вредност.

ЈаваСцрипт нект () метода

Објекат итератора има next()метод који враћа следећу ставку у низу.

next()Метод садржи два својства: valueи done.

  • валуе својство може бити било ког типа података и представља тренутну вредност у низу.
    value
  • учињено имовина је боолеан вредност која означава да ли је понављање је потпуна или не. Ако је итерација непотпуна, својство се поставља на , иначе се поставља на .
    donedonefalsetrue

Погледајмо пример итерабле низа:

 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()више пута да бисте прешли преко arrIteratorобјекта.

  • next()Метод враћа објекат са два својства: valueи done.
  • Када next()метода достигне крај низа, тада се doneсвојство поставља на false.

Погледајмо како for… ofпетља извршава горњи програм. На пример,

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

Оутпут

 Здраво

for… ofПетља ради исто као и програм горе.

for… ofПетља стално зове се next()метода на итератору. Једном када стигне done:true, for… ofпетља се прекида.

Кориснички дефинисан итератор

Такође можете креирати сопствени итератор и позвати га next()да бисте приступили следећем елементу. На пример,

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

Оутпут

 (вредност: "х", готово: нетачно) (вредност: "е", готово: нетачно) (вредност: "л", готово: нетачно) (вредност: "л", готово: нетачно) (вредност: "о" , готово: нетачно) (вредност: недефинисано, готово: тачно)

У горе наведеном програму створили смо сопствени итератор. На displayElements()функција враћа valueи doneимовине.

  • Сваки пут када се next()метода позове, функција се извршава једном и приказује вредност низа.
  • Коначно, када су сви елементи низа исцрпљени, doneсвојство се поставља на true, са valueас undefined.

Занимљиви Чланци...