Метод forEach
Метод forEach
Технический фундамент forEach
forEach выполняет callback для каждого элемента в порядке индексов и всегда возвращает undefined.
Это метод побочных эффектов, а не построения новой коллекции.
const arr = [1, 2, 3];
let sum = 0;
const result = arr.forEach((n) => {
sum += n;
});
console.log(sum); // 6
console.log(result); // undefined
Ключевой момент: если нужен новый массив, выбирают map, а не forEach.
Синтаксис
array.forEach((element, index, arr) => {
// действие
});
element— текущий элемент;index— его индекс;arr— исходный массив.
const skills = ['HTML', 'CSS', 'JS'];
skills.forEach((skill, index) => {
console.log(`${index + 1}. ${skill}`);
});
Отличие от map
Здесь часто путаются: если тебе нужен новый массив, forEach не подходит.
const nums = [1, 2, 3];
const result = nums.forEach((n) => n * 2);
console.log(result); // undefined
Правильный выбор для нового массива будет в следующем уроке — map.
Проверь себя: почему forEach неудобен, если надо получить массив удвоенных значений?
Микро-сценарии
- Подготовка строк для логов.
orders.forEach((order) => {
console.log(`Order #${order.id} status: ${order.status}`);
});
- Подсчет общей суммы с внешней переменной.
let total = 0;
const prices = [100, 250, 50];
prices.forEach((price) => {
total += price;
});
console.log(total); // 400
Что будет, если изменить вход
const arr = [];
arr.forEach((x) => console.log(x));
Если массив пустой, callback просто не выполнится ни разу.
Типичные ошибки
- Ожидать возвращаемое значение как у
map. - Пытаться прервать
forEachчерезbreak(не работает). - Думать, что
returnвнутри callback остановит обход (он завершает только текущий callback).
[1, 2, 3].forEach((n) => {
if (n === 2) return; // это скорее "continue", а не "break"
console.log(n);
});
// 1
// 3
- Делать сложную цепочку побочных эффектов, которую тяжело отлаживать.
- Менять массив внутри
forEachбез крайней необходимости.
Анти-провал: используешь forEach, когда цель именно «выполнить действие для каждого элемента», а не «получить новый массив».
Краткий итог
forEachпроходит по каждому элементу массива.- Он не возвращает новый массив (
undefined). - Подходит для побочных эффектов: логов, счетчиков, отправки событий.
- Для преобразования данных чаще выбирай
map,filter,reduce. - Четко разделяй: действие (
forEach) и трансформация (map/filter).