Метод forEach() в языке JS используется для прохода всех элементов массива. Данный цикл работает так — он перебирает каждый элемент и выполняет переданную ему функцию для каждого элемента.
Теперь давайте рассмотрим параметры, которые данный метод принимает
array.forEach(function callback(currentValue, index, currentArray)[, thisArg]);
callback
— та самая функция, которая будет вызвана для каждого элемента при выполнении цикла forEach
Callback может быть стрелочной функцией и принимает такие параметры
currentValue
— значение текущего элемента массиваindex
— порядковый номер элемента (начиная с 0)currentArray
— массив, который мы перебираем
thisArg
— это необязательный параметр. Значение, используемое в качестве this
при вызове функции callback
.
Примеры использования
Самый простой пример:
let arr = ["John", "Mike", "Andry", "Shenon"]; arr.forEach((item, index) => { // item - элемент массива на текущей итерации // index - порядковый номер элемента в массиве console.log(`${index}: ${item}`); })
Рассмотрим более сложный пример. У вас в html есть список <ul>, к которому вам нужно из массива добавить данные:
let arr = ['BMW', 'Mercedes', 'Volkswagen', 'Toyota']; const carList = document.querySelector('.car-list'); let list = ''; arr.forEach(item => { list += `<li>${ item }</li>` }); carList.innerHTML = list;
Итак, сначала мы с DOM дерева вытягиваем список ul, чтобы потом к нему добавить каждый элемент li. Задаем переменную, к которой добавим пункты списка. С помощью метода forEach()
проходим по нашему массиву и добавляем всё к li. Затем с помощью .innerHTML
добавляем это к полученному ul.
Полный код с html смотрите тут:
Теперь рассмотрим пример, когда у нас есть массив и нам нужно заменить какое-то значение при условии. Например, в массиве из примера выше, нам нужно заменить Toyota на Lexus:
let arr = ['BMW', 'Mercedes', 'Volkswagen', 'Toyota']; arr.forEach((item, index) => { if (item === 'Toyota') { arr[index] = 'Lexus'; // Выбираем нужный элемент массива по его индексу и присваиваем ему новое значение } }) console.log(arr); // ['BMW', 'Mercedes', 'Volkswagen', 'Lexus']
Пишем свой forEach с помощью цикла
В JS метод forEach сделан для удобства, но мы также можем пройтись по массиву используя обычный цикл for.
let arr = ['Mike', 'Ray', 'Liam', 'Mason', 'Jacob']; for (let i = 0; i < arr.length; i++) { console.log(arr[i]); }
Перебор массива объектов
Скорее всего на практике вам чаще всего придется делать перебор массива объектов, чтобы вывести какие-либо данные, изменить свойства объекта или добавить что-либо к объекту.
Давайте рассмотрим такие примеры.
Пример 1. У нас есть ответ от сервера с именами и возрастом пользователей. Нам нужно вывести данные только тех пользователей, которые старше 18
let users = [ { name: 'Steve', age: 18 }, { name: 'John', age: 12 }, { name: 'Liam', age: 16 }, { name: 'Mike', age: 20 }, { name: 'Jacob', age: 21 } ] users.forEach(user => { if (user.age >= 18) console.log(user.name); });
В данном случае на каждой итерации в переменную user
мы получаем объект. Мы знаем, что у него есть свойство age и с помощью if мы проверяем соответствует ли возраст пользователя нашему условию (18 лет). Если да, тогда выводим имя в консоль.
Пример 2. Давайте добавим всем пользователям свойство city.
let users = [ { name: 'Steve', age: 18 }, { name: 'John', age: 12 }, { name: 'Liam', age: 16 }, { name: 'Mike', age: 20 }, { name: 'Jacob', age: 21 } ] users.forEach(user => { user.city = 'New York'; });