forEach() перебирает элементы массива и вызывает функцию для каждого из них.
Это один из самых популярных способов пройтись по массиву, когда нужно что-то сделать с каждым элементом, но не нужно собирать новый массив.
Синтаксис
array.forEach(callback)
array.forEach(callback, thisArg)
callback - функция, которая будет вызвана для каждого элемента массива.
Что делает forEach()
Метод проходит по массиву слева направо и вызывает callback для каждого элемента.
const numbers = [1, 2, 3];
numbers.forEach((value) => {
console.log(value);
});
Результат:
1
2
3
Аргументы callback
Callback в forEach() может получать до трёх аргументов:
array.forEach((element, index, array) => {
// ...
});
element- текущий элементindex- индекс текущего элементаarray- сам массив целиком
Пример:
const fruits = ["apple", "banana", "orange"];
fruits.forEach((fruit, index) => {
console.log(index, fruit);
});
Что возвращает forEach()
forEach() всегда возвращает undefined.
const numbers = [1, 2, 3];
const result = numbers.forEach((value) => {
console.log(value);
});
console.log(result); // undefined
Это очень важный момент: forEach() не создаёт новый массив.
forEach() и map()
Эти методы часто путают.
const numbers = [1, 2, 3];
const result = numbers.map((value) => value * 2);
console.log(result); // [2, 4, 6]
map() возвращает новый массив.
forEach() нужен не для преобразования, а для побочных действий: например, вывести что-то в консоль, обновить счётчик или отправить данные дальше.
Изменение массива внутри forEach()
Сам метод forEach() не меняет массив, но callback внутри него может это сделать.
const numbers = [1, 2, 3];
numbers.forEach((value, index, array) => {
array[index] = value * 2;
});
console.log(numbers); // [2, 4, 6]
То есть метод сам по себе не мутирующий, но код внутри callback может менять данные.
forEach() нельзя остановить через break
forEach() не является обычным циклом, поэтому break и continue здесь не работают.
const numbers = [1, 2, 3, 4];
numbers.forEach((value) => {
console.log(value);
});
Если нужно остановить обход раньше, чаще используют:
for...ofsome()every()
Пустые слоты
forEach() пропускает пустые слоты в массиве.
const arr = Array(3);
arr.forEach((value) => {
console.log(value);
});
Здесь callback вообще не вызовется.
Это важно помнить при работе с массивами, созданными через Array(length).
Когда это полезно
forEach() удобно использовать, когда:
- нужно пройтись по всем элементам массива
- не нужен новый массив как результат
- внутри нужно выполнить побочное действие
Пример:
const users = ["Anna", "Ivan", "Oleg"];
users.forEach((user) => {
console.log(`Привет, ${user}`);
});
Частые ошибки
Думать, что forEach() возвращает новый массив
const numbers = [1, 2, 3];
const result = numbers.forEach((value) => value * 2);
console.log(result); // undefined
Если нужен новый массив, обычно используют map().
Пытаться остановить цикл через break
const numbers = [1, 2, 3];
numbers.forEach((value) => {
// break; // Ошибка
});
Для досрочной остановки forEach() не подходит.
Забывать, что пустые слоты пропускаются
const arr = Array(2);
arr.forEach((value) => {
console.log(value);
});
Callback здесь не выполнится ни разу.
Быстрая памятка
forEach()перебирает элементы массива- callback может получать
element,indexиarray forEach()возвращаетundefined- метод не создаёт новый массив
forEach()нельзя остановить черезbreak
Коротко
forEach() - это удобный способ пройтись по массиву и выполнить действие для каждого элемента. Главное, что стоит запомнить: метод ничего не возвращает и не подходит, если нужен новый массив или досрочная остановка обхода.