Хотя итераторы и Iterables являются важной концепцией в JavaScript, они могут быть не так широко обсуждаемы или известны, как некоторые другие функции языка. Однако они являются неотъемлемой частью JavaScript и используются в различных сценариях, особенно при работе с коллекциями и выполнении итераций.

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

В этой статье мы рассмотрим следующие понятия:

  1. Итерации.
  2. Пользовательские итерации.
  3. Итераторы.
  4. Пользовательские итераторы.
  5. Итераторы против итераторов.

Что такое итерируемый объект?

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

Как насчет настраиваемых итерируемых или определяемых пользователем итерируемых объектов?

давайте код!!!

Мы пишем итерируемый объект, который будет перебирать массив и печатать значения массива.

Связь между 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. {value, done}: каждое следующее выполнение возвращает значение, но done возвращается как false до тех пор, пока итерация не будет завершена (достигнет длины массива/объекта). Как только все значения повторяются, done возвращается как true, а значение оказывается неопределенным.

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

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

Давайте используем итератор для массива

переменная темп = [1,2,3]

  1. Получить объект итератора для коллекции или структуры данных (в данном случае массив)

var iterator = temp[Symbol.iterator]

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

console.log(итератор.следующий()); // { значение: 1, выполнено: ложь } console.log(iterator.next()); // { значение: 2, выполнено: ложь } console.log(iterator.next()); // { значение: 3, выполнено: false console.log(iterator.next()); // { значение: не определено, готово: правда }

Просто не правда ли?

Как насчет пользовательского итератора. давайте код!!!

Как мы обсуждали ранее, итератор — это замыкание, которое возвращает объект, имеющий функцию next()/ или функцию next(), при каждом последующем вызове следующей функции мы получаем значение следующей итерации.

Много кода??? упростить с помощью генераторов. О генераторах я расскажу в отдельном блоге.

Генераторы в основном автоматически предоставляют следующую функцию, и разработчик не должен беспокоиться о возврате замыкания (next()) и сохранении внутренних ссылок на состояние.

Вывод:

В заключение, итераторы и итерируемые объекты — это фундаментальные концепции JavaScript, которые облегчают обход коллекций и манипулирование ими. Итераторы обеспечивают стандартизированный способ последовательного доступа к элементам, а итерируемые объекты — это объекты, определяющие поведение итерации путем реализации протокола итератора.

Создавая собственные итераторы и итерируемые объекты, разработчики могут расширять функциональные возможности JavaScript в соответствии со своими конкретными потребностями. Пользовательские итераторы позволяют точно контролировать процесс итерации, обеспечивая настраиваемую логику и поведение при доступе к элементам. Пользовательские итерации, с другой стороны, предоставляют интерфейс более высокого уровня для работы с пользовательскими коллекциями, делая их совместимыми со встроенными языковыми конструкциями и функциями.

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

Понимание итераторов и итерируемых объектов, а также генераторов открывает возможность писать эффективный, модульный и повторно используемый код при работе с коллекциями и выполнении итераций. Используете ли вы встроенные итерации или создаете свои собственные, эти концепции являются важными инструментами в наборе инструментов разработчика JavaScript. Следите за нашей предстоящей статьей о генераторах, чтобы еще больше расширить свои знания и навыки в методах итерации JavaScript.