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

Цикл — это многократное выполнение определенного блока кода. Цикл позволяет нам повторять инструкции до тех пор, пока не будет сказано обратное. Цикл также позволяет нам устанавливать условия, которые остановят повторный запуск нашего кода. Давайте рассмотрим один пример цикла и пример итерации.

Модель цикла For

for( инициализация; условие; итерация) {

[тело цикла] }

Цикл for повторяет блок кода заданное и фиксированное количество раз. Условие устанавливает указанное количество раз и останавливает выполнение кода после этой точки. В этом случае console.log повторяется всего три раза, как и ожидалось по условию. Итерация является инкрементом, и мы начали инициализатор с 0. Важно отметить, что итератор может как уменьшать, так и увеличивать.

В цикле for мы должны использовать оператор let, потому что мы манипулируем переменными с помощью итератора (++, — ). Этот же совет применим к операторам while, поскольку он успешно оценивается как истина, когда выполняется указанное условие.

Теперь вопрос в том, какой тип оператора позволяет нам использовать const? Ответом на этот вопрос является оператор for…of. Давайте рассмотрим это на примере и посмотрим, почему мы можем использовать const вместо let для объявления наших переменных.

for…of позволяет нам перебирать итерируемые объекты, которые могут включать в себя массивы и строки. Вот пример цикла for… of над строкой:

В этом случае мы можем использовать const для объявления нашей переменной letter, потому что наш возврат — это просто цикл символов в нашей строке. Переменная остается неизменной, так как возврат не требует никаких манипуляций.

Мы также можем использовать циклы для перебора объектов. Если вы хотите перебирать свойства объекта, модель будет выглядеть примерно так:

Модель For…In

for (const [ключ] в [объекте]) {

console.log(ключ)

};

В приведенном выше примере мы перебираем объект автора и обращаемся к ключам в этом объекте, чтобы распечатать их значения. Это полезный инструмент для доступа к ключам в объекте, особенно к тем, которые предоставляются API или данными JSON. Стоит отметить, что операторы for…in нельзя использовать с массивами. Проблема с использованием for…in для циклического обхода массива заключается в том, что он не даст оптимальных результатов, поскольку он будет выполнять итерацию, как если бы это был объект, поэтому он работает медленнее.

Итак, есть ли удобные методы итератора?

Да! И они мои любимые (не без оснований). Давайте пройдемся по ним.

  • .find()- возвращает первый элемент, который удовлетворяет операции тестирования.
  • .filter () — создает новый массив с элементами, которые удовлетворяют заданному тесту.
  • .map() — запускает каждый элемент через функцию и генерирует новый массив с результатами.
  • .forEach()- выполняет заданную функцию для каждого элемента в заданном массиве.

Один из наиболее распространенных методов итератора, который я использовал, — это метод forEach(). В приведенном выше примере мы объявляем константу с именем numbers, которая содержит массив с набором чисел. Для каждого из чисел мы применяем функцию, которая захватывает все индексы в массиве и применяет функцию добавления 2 к каждому из них. Ожидаемый результат отражает успешное выполнение: 1 + 2 = 3, 2 + 2 = 4 и т. д.

Эти методы легко применимы во многих операциях и помогают облегчить процесс назначения функций различным структурам данных.