Метод 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 неудобен, если надо получить массив удвоенных значений?

Микро-сценарии

  1. Подготовка строк для логов.
orders.forEach((order) => {
  console.log(`Order #${order.id} status: ${order.status}`);
});
  1. Подсчет общей суммы с внешней переменной.
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).