JavaScript предоставляет n числовых способов перебора массивов. Одним из основных способов помимо традиционного цикла for является цикл forEach.

l∞ps для всех

Одно из самых больших преимуществ использования JavaScript по сравнению с другими языками заключается в том, что он предоставляет широкий выбор для выполнения простых и базовых задач. Рассмотрим, например, зацикливание. Одна из самых простых и основных частей программы. Существует так много способов зацикливания, что каждый программист JS имеет свой предпочтительный стиль зацикливания. forEach - одно из них.

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

Синтаксис

Приведенный выше фрагмент - это синтаксис цикла forEach. Цикл forEach может перебирать только итераторы. Здесь мы используем массив. Массив повторяется, и один за другим все элементы присваиваются e, и мы можем выполнять с ним любую операцию.

Параметры

Параметры передаются в функции обратного вызова, они:

  • currentValue - текущие значения, передаваемые в обратном вызове. В фрагменте текущее значение - e. Этот параметр должен быть предоставлен.
  • index - индекс текущего элемента в массиве. Это необязательный параметр.
  • this - Ссылка на вызывающий объект или, другими словами, он будет использоваться в качестве значения this обратного вызова. В противном случае будет установлено значение undefined. В конечном итоге предоставленное значение this определяется обычными правилами этого присваивания. Это может немного сбивать с толку. , вы можете сослаться на эту статью об этом, чтобы узнать об этом больше.

Возвращение

неопределенный. Всегда.

Фильтр, Карта возвращают массив, а forEach возвращает значение undefined. В этом основное отличие этих петель.

Теперь, когда основы выполнены, давайте перейдем к правилам, которые следует учитывать при использовании forEach.

  • forEach выполняет функцию обратного вызова один раз для каждого элемента массива.
  • Он всегда возвращает undefined.
  • Он не изменяет массив, но обратный вызов может, если он запрограммирован на это.
  • forEach нельзя объединять в цепочку, например map, reduce или filter.
  • Диапазон элементов, обрабатываемых циклом forEach, устанавливается перед первым вызовом функции обратного вызова.
  • Элементы, добавленные к массиву после запуска forEach, цикл не посещает.
  • Элементы, которые удаляются до посещения цикла, не посещаются.
  • Если элементы, которые уже посещены, удаляются из массива во время итерации, последующие элементы будут пропущены.
  • Цикл forEach после запуска не может быть остановлен. Вроде, как бы, что-то вроде..
  • forEach не выполняет обратный вызов для элементов массива без значений.

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

Ниже будут показаны различные примеры, которые выделят правила и прояснят, когда и где forEach следует использовать, а когда нет.

Примеры

Разница между синтаксисом циклов for-loop и forEach

Этот фрагмент показывает, насколько просто использовать цикл forEach по сравнению с циклом for.

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

В этом фрагменте мы можем заметить, что когда в массиве есть нулевой, пустой или неопределенный элемент, цикл forEach просто не обращается к нему.

Здесь мы можем увидеть использование ключевого слова this. Мы создали функцию с именем counter и добавили функцию добавления к ее прототипу. Используя цикл forEach, мы подсчитываем количество элементов, присутствующих в массиве, и суммирование элементов. это используется для указания на сумму свойств и счетчик.

В этом фрагменте мы используем forEach в массиве, и если элемент соответствует определенному условию, мы удаляем этот элемент из массива с помощью shift (). Здесь происходит одна любопытная вещь: элемент 2 удаляется из массива bu, затем он также печатается, но следующий элемент, т.е. 3, не печатается.

Это потому, что элемент 2 был удален после печати. И когда он был удален с помощью shift (), элемент 3 занял его позицию. Текущий индекс на момент удаления был 1. После удаления forEach переместился в индекс 2, который должен был быть позицией 3, но он был перемещен в позицию 1 на место 2 из-за который не был напечатан.

В правилах было сказано, что вы не можете остановить цикл forEach после его запуска. Что ж, его нельзя остановить обычными средствами, такими как break или возвращение false из обратного вызова. Он останавливается только при возникновении исключения. В этом фрагменте мы создаем объект с именем exception, и если условие соответствует требованиям, генерируется исключение, которое в конечном итоге останавливает выполнение цикла forEach. Весь цикл заключен в блок try catch.

Надеюсь, вам понравилась статья и вы поняли, как работает цикл forEach.