Данная задача имеет множество решений: в JS есть метод для перебора массива forEach, проверки every, фильтрации массива filter, трансформации массива map, последовательной обработки reduce. Кроме перечисленных методов для этих целей также можно использовать циклы. Рассмотрим наиболее удобные методы для перебора массива.
forEach
Метод перебирает массив и применяет функцию callbackFunction для каждого элемента массива.
1 2 3 4 |
arr.forEach(callbackFunction(currentVal , index , array){ //содержимое callback функции }, this) |
- arr – перебираемый массив,
- currentVal – значение текущего элемента перебираемого массива,
- index – индекс текущего элемента перебираемого массива (необязательный параметр),
- array – ссылка на перебираемый массив(необязательный параметр)
- this – указывается, что использовать в качестве this при вызове callback функции(необязательный параметр)
Метод forEach возвращает Undefined.
Его основное назначение – преобразование массива.
map
Метод также перебирает массив, вызывая callbackFunction для каждого элемента.
1 2 3 4 |
let newArr = arr.map(callbackFunction( currentVal, index, array) { // содержимое callback функции }, thisArg) |
- newArr – новый массив, содержащий результаты применения callback функции к каждому элементу массива,
- arr – перебираемый массив,
- currentVal – значение текущего элемента перебираемого массива,
- index – индекс текущего элемента перебираемого массива (необязательный параметр),
- array – ссылка на перебираемый массив(необязательный параметр)
- this – указывается, что использовать в качестве this при вызове callback функции(необязательный параметр)
Основное отличие данного метода от предыдущего то, что результатом выполнения является массив результатов вызова функции callback.
Основное назначение метода – получение нового преобразованного массива.
filter / every / some
Часто переборка массива требуется с целью выборки или фильтрации элементов. Для этих целей в JS используются методы filter, every, some.
Данные методы используются для фильтрации или проверки входного массива на соответствие его элементов заданным условиям.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
let newArr = arr.filter(callbackFunction(currentVal, index, array){ // содержимое callback функции }, this) let checkArr = arr.every(callbackFunction(currentVal, index, array){ // содержимое callback функции }, this) let checkSomeArr = arr.some(callbackFunction(currentVal, index, array){ // содержимое callback функции }, this) |
Они имеют схожий синтаксис и одинаковый набор параметров:
- newArr, checkArr, checkSomeArr – новый массив, содержащий результаты применения callback функции к каждому элементу массива,
- arr – перебираемый массив,
- currentVal – значение текущего элемента перебираемого массива,
- index – индекс текущего элемента перебираемого массива (необязательный параметр),
- array – ссылка на перебираемый массив(необязательный параметр)
- this – указывается, что использовать в качестве this при вызове callback функции(необязательный параметр)
Различие данных методов состоит в возвращаемом значении:
- filter – возвращает массив, содержащий элементы входного массива, для которых callback функция возвратит true,
- every – возвращает true, если callback функция возвратит true для всех элементов входного массива,
- some – возвращает true, если callback функция возвратит true хотя бы для одного элемента входного массива.
reduce
Данный метод предназначен не для перебора. Используется для вычисления определенного значения на основе входного массива. Применяет функцию callback для каждого элемента входного массива с сохранением промежуточного результата. Возвращает результат последнего выполнения callback функции.
1 2 3 4 5 6 |
let newVal = arr.reduce(callbackFunction(accumulator, currentVal, index, array){ // содержимое callback функции, например: // return accumulator+curentval; // результатом выполнения будет сумма всех элементов массива. }, initVal) |
- arr – преобразуемый массив,
- accumulator – содержит результат предыдущего выполнения callback функции,
- currentVal – значение текущего элемента перебираемого массива,
- index – индекс текущего элемента перебираемого массива (необязательный параметр),
- array – ссылка на перебираемый массив(необязательный параметр)
- initVal – объект, который используется в качестве первого аргумента (вместо аккумулятора) при первом выполнении функции callback (необязательный параметр)