> В чем разница между map и forEach в JavaScript (JavaScript)

Уровень: middle · Роль: frontend · Категория: Технические вопросы

Компании: Sminex, Софт Медиа Групп

Стек: JavaScript

> Пример ответа

Короткий ответ

Основное различие в том, что map возвращает новый массив с преобразованными элементами, а forEach просто выполняет функцию для каждого элемента и возвращает undefined. map используется для трансформации данных, forEach - для выполнения побочных эффектов (логирование, мутация внешних переменных). Оба не изменяют исходный массив, если не делать этого явно.

Подробное объяснение

map и forEach - методы массива, принимающие callback-функцию, которая выполняется для каждого элемента. map создаёт и возвращает новый массив той же длины, где каждый элемент - результат вызова callback. forEach ничего не возвращает (undefined) и предназначен для итерации с побочными эффектами.

Ключевые отличия:

  • Возвращаемое значение: map возвращает массив, forEach - undefined.
  • Цепочка вызовов: map можно чейнить (например, arr.map(...).filter(...)), forEach - нет.
  • Производительность: forEach может быть незначительно быстрее, так как не создаёт новый массив, но разница обычно несущественна.
  • Мутация: оба не изменяют исходный массив, если callback не делает это явно.

На практике

  • Используй map, когда нужно получить новый массив на основе существующего (например, преобразовать id в строки).
  • Используй forEach, когда нужно выполнить действие для каждого элемента без создания нового массива (например, отправить данные на сервер, обновить DOM).
  • Избегай forEach, если планируешь использовать break или continue - для этого лучше подходит for...of.
  • В функциональном программировании предпочтительнее map, так как он не вызывает побочных эффектов.

Пример кода

JAVASCRIPT
const numbers = [1, 2, 3];
// map - возвращает новый массив
const doubled = numbers.map(num => num * 2);
console.log(doubled); // [2, 4, 6]
console.log(numbers); // [1, 2, 3] (не изменён)
// forEach - ничего не возвращает
const result = numbers.forEach(num => console.log(num * 2));
// выведет: 2, 4, 6
console.log(result); // undefined

Как отвечать на собеседовании

Начни с ключевого отличия - возвращаемое значение. Приведи пример использования каждого метода. Упомяни, что map иммутабелен и подходит для функционального стиля, а forEach - для побочных эффектов. Если спросят про производительность, скажи, что разница минимальна и выбор зависит от задачи. Не забывай упомянуть, что оба не изменяют исходный массив.

Что проверяет интервьюер

  • Понимание разницы между чистыми функциями и побочными эффектами.
  • Умение выбирать правильный метод под задачу.
  • Знание, что forEach не поддерживает break/continue.
  • Понимание, что map создаёт новый массив, а не мутирует исходный.

Типичные ошибки

  • Использовать forEach для трансформации данных и потом пытаться присвоить результат.
  • Думать, что map изменяет исходный массив.
  • Пытаться прервать forEach через return (он не работает как break).
  • Использовать map только ради итерации, игнорируя возвращаемое значение.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью