Двумя наиболее часто используемыми методами итерации являются Array.prototype.map() и Array.prototype.forEach(). Необходимо понимать их различия.
Оба метода forEach() и map() получают функцию в качестве параметра. Затем он применяет параметры к каждому элементу.
Первое отличие — это возвращаемое значение.
Метод forEach() возвращает неопределенное значение, а метод map() возвращает новый массив, содержащий преобразованные элементы, но возвращаемое значение отличается.
const arr= [1, 2, 3, 4, 5]
arr.forEach(x => x * x)
// undefined
arr.map(x => x * x)
// [1, 4, 9, 16, 25]
Второе отличие состоит в том, что за функцией Map() могут следовать другие методы.
После метода map() для массива можно добавить функции уменьшения(), сортировки(), фильтра() и т. д., но для метода forEach() это невозможно, поскольку он возвращает неопределенное значение.
Третье отличие состоит в том, что функция map() не изменяет массив, в котором она вызывается.
Метод map() возвращает совершенно новый массив, содержащий преобразованные элементы и тот же объем данных, без изменения исходного массива. А forEach(), даже если он возвращает неопределенное значение, он изменит исходный массив с помощью переданной функции обратного вызова (обратного вызова).