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

Карта()

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

Это пример map() для умножения массива чисел и возвращает новый массив с тем же количеством элементов массива чисел:

const numbersArray = [1, 2, 3, 4, 5];
const mapMultipyedNumbersArray = numbersArray.map((num) => num * 5);
console.log(mapMultipyedNumbersArray); // Output: [ 5, 10, 15, 20, 25 ]

для каждого()

Метод forEach() также является методом массива, но он не возвращает новый массив, как это делает метод map(). Это используется для запуска функции для каждого элемента массива.

Поскольку forEach() не возвращает новый массив, это пример его использования для умножения массива чисел и помещения умноженных элементов в новый массив:

const numbersArray = [1, 2, 3, 4, 5];
const forEachMultipyedNumbersArray = [];
numbersArray.forEach((num) =>
{
forEachMultipyedNumbersArray.push(num * 5);
});
console.log(forEachMultipyedNumbersArray); // Output: [ 5, 10, 15, 20, 25 ]

Различия в производительности

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

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

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

Тестирование на примере

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

В приведенном ниже примере мы создали массив чисел, а затем использовали map() и forEach(), чтобы умножить массив чисел и вернуть новый массив с результатами, и мы использовали функции console.time() и console.timeEnd() для измерения производительности. методов.

const numbers = [1, 2, 3, 4, 5];

// map()
console.time('map');
const mapMultipyedNumbersArray = numbers.map((num) => num * 5);
console.timeEnd('map');

// forEach()
console.time('forEach');
const forEachMultipyedNumbersArray = [];
numbers.forEach((num) =>
{
forEachMultipyedNumbersArray.push(num * 5);
});
console.timeEnd('forEach');

console.log(mapMultipyedNumbersArray); // Output: [ 5, 10, 15, 20, 25 ]
console.log(forEachMultipyedNumbersArray); // Output: [ 5, 10, 15, 20, 25 ]

После того, как мы запустили приведенный выше пример, мы получили следующий вывод.

map: 0.187ms
forEach: 0.055ms
[ 5, 10, 15, 20, 25 ]
[ 5, 10, 15, 20, 25 ]

Затем мы видим, что forEach() быстрее, чем map(). Но этот результат может варьироваться в зависимости от конкретных вариантов использования и объема обрабатываемых данных. Разница в производительности между map() и forEach() не всегда может быть заметна, это тоже важно учитывать.

Заключение

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

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

Важно отметить, что разница в производительности между map() и forEach() обычно невелика, и выбор между ними должен основываться на конкретном сценарии использования и объеме обрабатываемых данных.

Спасибо.