Докато итераторите и Iterables са важна концепция в JavaScript, те може да не са толкова широко обсъждани или добре известни като някои други функции на езика. Те обаче са съществена част от JavaScript и се използват в различни сценарии, особено при работа с колекции и извършване на итерации.

Въпреки че не са толкова известни като някои други концепции на JavaScript като функции или обекти, итераторите са основен инструмент за работа с колекции в JavaScript и разбирането на тяхното използване може значително да подобри способността ви да манипулирате и итерирате структури от данни.

В тази статия ще разгледаме следните понятия:

  1. Итерируеми.
  2. Персонализирани Iterables.
  3. Итератори.
  4. Персонализирани итератори.
  5. Итератори срещу Iterables.

Какво е Iterable?

  • Iterable е обект, който дефинира свойството Iterator.
  • За да бъде итерируем, обектът трябва да имплементира метода @@iterator.
  • Свойството `Symbol.Iterator` на обект преобразува обекта в Iterable.
  • Итерируеми, които могат да итерират само веднъж (като генератори), обикновено връщат this от техния метод @@iterator
  • Итераторите, които могат да бъдат итерирани много пъти, трябва да връщат нов итератор при всяко извикване на @@iterator.
var iterable ={
    [Symbol.iterator] : () => {
        //Iterator defination
    }
}

Какво ще кажете за персонализирани Iterables или дефинирани от потребителя Iterables.

Нека кодираме!!!

Пишем итерируем обект с итерация върху масив и отпечатване на стойностите на масива.

Връзка между Iterable и Iterator.

  • Както беше обсъдено по-горе Iterable е обект, който се състои от Iterator
  • Итераторът е дефиниран под ключа Symbol.Iterator.
  • Итераторът е дефиницията на действието на итерацията, която съдържа персонализираната логика на функцията next().
  • Следващата функция се извиква итеративно и според протокола връща стойност и готови ключове.

Какво е итератор?

Итераторите често се използват в комбинация с цикъла for...of в JavaScript за итериране на елементи по кратък и четим начин. Освен това, много вградени JavaScript функции и методи, като Array.prototype.forEach() и Array.prototype.map(), вътрешно използват итератори за обработка на колекции. В тази статия трябва да научим как да пишем персонализирани итератори, за да разберем функционирането на коренното ниво на итераторите.

Накратко, итераторът е затваряне, което връща обект, имащ функция next()/ или функция next(), при всяко следващо извикване на следващата функция получаваме следващата стойност на итерация.

Градивни елементи на итератор:

  1. next() : next функция връща обект, състоящ се от два ключа {value, done}.
  2. {стойност, done}: Всяко следващо изпълнение връща стойност, но done се връща като false, докато итерацията не завърши (достига дължина на масива/обекта). След като всички стойности бъдат итерирани, done се връща като true и стойността се оказва недефинирана.

3. Symbol.iterator: Този символ е добре познат символ в JavaScript, който дефинира итератора по подразбиране за обект. Обикновено се реализира като функция, която връща самия обект на итератора.

За да използвате итератор, обикновено извиквате метода Symbol.iterator на колекция или структура от данни, за да получите обект на итератор.

Да използваме итератор над масив

променлива температура = [1,2,3]

  1. Извличане на обекта на итератора за колекцията или структурата на данните (масив в този случай)

var iterator = temp[Symbol.iterator]

2. използвайте .next() на итератора, за да извлечете стойностите:

console.log(iterator.next()); // { стойност: 1, готово: невярно } console.log(iterator.next()); // { стойност: 2, готово: невярно } console.log(iterator.next()); // { стойност: 3, готово: невярно console.log(iterator.next()); // { стойност: недефинирано, готово: вярно }

Просто, нали?

Какво ще кажете за персонализиран итератор. нека кодираме!!!

Както обсъдихме по-рано, iterator е затваряне, което връща обект, имащ функция next()/ или функция next(), при всяко следващо извикване на следващата функция получаваме следващата стойност на итерация.

Много код??? опростете с генератори. Ще обсъдя генераторите в отделен блог.

Генераторите основно осигуряват автоматично следващата функция и разработчикът не трябва да се притеснява от връщането на затваряне (next()) и поддържането на препратки към вътрешно състояние.

Заключение:

В заключение, итераторите и iterables са фундаментални концепции в JavaScript, които улесняват преминаването и манипулирането на колекции. Итераторите осигуряват стандартизиран начин за последователен достъп до елементите, докато итераторите са обекти, които дефинират поведението при итерация чрез прилагане на протокола на итератора.

Чрез създаване на персонализирани итератори и итератори, разработчиците могат да разширят функционалността на JavaScript, за да отговарят на техните специфични нужди. Персонализираните итератори позволяват фин контрол върху процеса на итерация, позволявайки персонализирана логика и поведение при достъп до елементи. Персонализираните iterables, от друга страна, предоставят интерфейс от по-високо ниво за работа с дефинирани от потребителя колекции, което ги прави съвместими с вградени езикови конструкции и функции.

Макар че в тази статия се съсредоточихме върху итератори и итерируеми елементи, важно е да отбележим, че не сме изследвали генераторите, които са друга мощна функция в JavaScript. Генераторите предлагат удобен начин за дефиниране на итератори с помощта на специален функционален синтаксис, осигурявайки още повече гъвкавост и контрол върху процеса на итерация. Ще разгледаме генераторите и тяхното използване в предстояща статия.

Разбирането на итераторите и итерируемите елементи, заедно с генераторите, отключва способността за писане на ефективен, модулен и многократно използваем код при работа с колекции и извършване на итерации. Независимо дали използвате вградени итерируеми елементи или създавате свои собствени персонализирани, тези концепции са основни инструменти в инструментариума на разработчиците на JavaScript. Очаквайте предстоящата ни статия за генераторите, за да разширите още повече знанията и уменията си в техниките за итерация на JavaScript.