Существует пять способов перебора массивов. Они включают:
- Пока цикл
- Цикл Do-while
- Для цикла
- Цикл ForEach
- Цикл карты
Пока цикл
Оператор [while]
выполняет свои операторы до тех пор, пока указанное условие оценивается как true
. Синтаксис циклов while показан ниже:
while (condition) statement
Если condition
становится false
, statement
в цикле перестает выполняться, и управление переходит к оператору, следующему за циклом.
Проверка условия происходит перед выполнением statement
в цикле. Если условие возвращает true
, выполняется statement
и снова проверяется condition
. Если условие возвращает false
, выполнение останавливается, и управление передается оператору, следующему за while
.
Чтобы выполнить несколько операторов, используйте блочный оператор ({ }
), чтобы сгруппировать эти операторы.
Например:
let n = 0; let x = 0; while (n < 3) { n++; x += n; console.log('value of n', n) console.log('value of x', x) }
С каждой итерацией цикл увеличивает n
и добавляет это значение к x
. Поэтому x
и n
принимают следующие значения:
- После первого прохода:
n
=1
иx
=1
- После второго прохода:
n
=2
иx
=3
- После третьего прохода:
n
=3
иx
=6
После выполнения третьего прохода условие n < 3
больше не является true
, поэтому цикл завершается.
Обратите внимание, что += — это символ конкатенации, который либо складывает/объединяет две строки вместе, либо складывает/суммирует два числа вместе.
DO-во время цикла
Оператор [do...while]
повторяется до тех пор, пока указанное условие не станет ложным. Синтаксис цикла do-while показан ниже:
do statement while (condition);
statement
всегда выполняется один раз перед проверкой условия. (Чтобы выполнить несколько операторов, используйте блочный оператор ({ }
), чтобы сгруппировать эти операторы.)
Если condition
равно true
, инструкция выполняется снова. В конце каждого выполнения проверяется условие. Когда условие равно false
, выполнение останавливается, и управление переходит к оператору, следующему за do...while
.
Например,
let i = 0; do { i += 1; console.log(i); } while (i < 5);
Цикл do-while
выполняется как минимум один раз и повторяется до тех пор, пока i
не станет меньше 5
.
Для цикла
Цикл [for]
повторяется до тех пор, пока указанное условие не станет ложным. Цикл for
в JavaScript похож на цикл for
в Java и C. Синтаксис для for
loops показан ниже:
for (the declaration or initialization; the condition; the incrementation or decrementation) statement
При выполнении цикла for
происходит следующее:
- Инициализирующее выражение
initialization
, если оно есть, выполняется. Это выражение обычно инициализирует один или несколько счетчиков циклов, но синтаксис допускает выражение любой степени сложности. Это выражение также может объявлять переменные. - Выражение
condition
оценивается. Если значениеcondition
истинно, операторы цикла выполняются. В противном случае циклfor
завершается. (Если выражениеcondition
полностью опущено, условие считается истинным.) statement
выполняется. Чтобы выполнить несколько операторов, используйте блочный оператор ({ }
), чтобы сгруппировать эти операторы.- Если присутствует, выполняется обновленное выражение
afterthought
. - Управление возвращается к шагу 2.
Например,
for(i = 0; i < 10; i++){ if(i === 2){ console.log('2 is my favorite') continue }; if(i === 8){ console.log('find out why the loop broke at 8') break }; console.log('Number' + i) }
Цикл ForEach
Цикл forEach()
— это метод, который выполняет предоставленную функцию один раз для каждого элемента массива. Другими словами, forEach()
можно рассматривать как повторяющуюся функцию. Синтаксис цикла forEach()
показан ниже:
forEach(callbackFn) forEach(callbackFn, thisArg)
Метод forEach()
является итеративным методом. Он вызывает предоставленную функцию callbackFn
один раз для каждого элемента массива в порядке возрастания индекса. forEach()
всегда возвращает undefined и не является цепочкой. Типичный вариант использования — выполнение побочных эффектов в конце цепочки.
forEach()
не изменяет массив, для которого она вызывается, но функция, представленная как callbackFn
, может. Обратите внимание, однако, что длина массива сохраняется перед первым вызовом callbackFn
. Поэтому:
callbackFn
не будет обращаться ни к каким элементам, добавленным за пределами исходной длины массива, когда начался вызовforEach()
.- Изменения в уже посещенных индексах не приводят к повторному вызову
callbackFn
для них. - Если существующий, еще не посещенный элемент массива изменяется с помощью the
callbackFn
, его значение, переданное вcallbackFn
, будет значением на момент посещения этого элемента.
Метод forEach()
предполагает, что значение this
будет иметь свойство length
и свойства с целочисленным ключом.
Невозможно остановить или разорвать цикл forEach()
, кроме как выдать исключение. Если вам нужно такое поведение, метод forEach()
— неправильный инструмент.
forEach()
ожидает синхронную функцию — она не ждет промисов. Убедитесь, что вы знаете о последствиях использования промисов (или асинхронных функций) в качестве forEach
обратных вызовов.
callbackFn
Функция, выполняемая для каждого элемента массива. Его возвращаемое значение отбрасывается. Функция вызывается со следующими аргументами:
element
Текущий элемент обрабатывается в массиве.
index
Индекс текущего обрабатываемого элемента в массиве.
array
Был вызван массив forEach()
.
thisArg
(необязательно)
Значение для использования в качестве this
при выполнении callbackFn
.
Например,
const numbers = ['a', 'b', 'c']; numbers.forEach(number => console.log(number)); // Expected output: "a" // Expected output: "b" // Expected output: "c"
Обратите внимание, что метод forEach()
возвращает элементы массива.
Цикл карты
Метод map()
создает и возвращает новый массив, заполненный результатами вызова предоставленной функции для каждого элемента в вызывающем массиве. Синтаксис цикла карты показан ниже:
map(callbackFn) map(callbackFn, thisArg)
Метод map()
является итеративным методом. Он вызывает предоставленную функцию callbackFn
один раз для каждого элемента в массиве и строит новый массив из результатов.
callbackFn
вызывается только для индексов массива, которым присвоены значения.
Метод map()
является методом копирования. Это не изменяет this
. Однако функция, представленная как callbackFn
, может изменять массив. Обратите внимание, однако, что длина массива сохраняется перед первым вызовом callbackFn
. Поэтому:
callbackFn
не будет обращаться ни к каким элементам, добавленным за пределами исходной длины массива, когда начался вызовmap()
.- Изменения в уже посещенных индексах не приводят к повторному вызову
callbackFn
для них. - Если существующий, еще не посещенный элемент массива изменяется на
callbackFn
, его значение, переданное вcallbackFn
, будет значением на момент посещения этого элемента.
Метод map()
предполагает, что значение this
будет иметь свойство length
и свойства с целочисленным ключом.
callbackFn
Функция, выполняемая для каждого элемента массива. Его возвращаемое значение добавляется как один элемент в новый массив. Функция вызывается со следующими аргументами:
element
Текущий элемент обрабатывается в массиве.
index
Индекс текущего обрабатываемого элемента в массиве.
array
Был вызван массив map()
.
thisArg
(необязательно)
Значение, используемое как this
при выполнении callbackFn
.
Спасибо за прочтение