Я знаю, что таких тем было много. И я знаю основы: .forEach()
работает как с исходным массивом, так и .map()
с новым.
В моем случае:
function practice (i){
return i+1;
};
var a = [ -1, 0, 1, 2, 3, 4, 5 ];
var b = [ 0 ];
var c = [ 0 ];
console.log(a);
b = a.forEach(practice);
console.log("=====");
console.log(a);
console.log(b);
c = a.map(practice);
console.log("=====");
console.log(a);
console.log(c);
И это вывод:
[ -1, 0, 1, 2, 3, 4, 5 ]
=====
[ -1, 0, 1, 2, 3, 4, 5 ]
undefined
=====
[ -1, 0, 1, 2, 3, 4, 5 ]
[ 0, 1, 2, 3, 4, 5, 6 ]
Я не могу понять, почему использование practice
меняет значение b
на undefined
.
Прошу прощения, если это глупый вопрос, но я новичок в этом языке, и ответы, которые я нашел до сих пор, меня не удовлетворили.
javascript
arrays
loops
foreach
DzikiChrzan
источник
источник
.map
возвращает новый массив , но.forEach
ничего не возвращает . В принципе, если вы хотите получить измененную форму предыдущего массива, вы используете.map
, если вы этого не хотите, вы используете.forEach
.Ответы:
Они не одно и то же. Позвольте мне объяснить разницу.
forEach
: Это выполняет итерацию по списку и применяет некоторую операцию с побочными эффектами к каждому члену списка (пример: сохранение каждого элемента списка в базе данных)map
: Это выполняет итерацию по списку, преобразует каждый член этого списка и возвращает другой список того же размера с преобразованными элементами (пример: преобразование списка строк в верхний регистр)Ссылки
Array.prototype.forEach () - JavaScript | MDN
Array.prototype.map () - JavaScript | MDN
источник
Array.forEach
«Выполняет предоставленную функцию один раз для каждого элемента массива».Array.map
«Создает новый массив с результатами вызова предоставленной функции для каждого элемента в этом массиве».Итак, на
forEach
самом деле ничего не возвращает. Он просто вызывает функцию для каждого элемента массива и готово. Поэтому все, что вы возвращаете в этой вызываемой функции, просто отбрасывается.С другой стороны,
map
аналогичным образом вызовет функцию для каждого элемента массива, но вместо того, чтобы отбросить возвращаемое значение, он захватит его и построит новый массив этих возвращаемых значений.Это также означает, что вы можете использовать
map
везде, где вы используете,forEach
но вам все равно не следует этого делать, поэтому вы не собираете возвращаемые значения без какой-либо цели. Просто эффективнее не собирать их, если они вам не нужны.источник
forEach
было бы «более эффективно», чемmap
особенно, если бы полифил требовался для поддержкиforEach
в более старом браузере (IE8 или 9). Возвратmap
ничего не нужно назначать ; возвращаемое значение должно быть собрано мусором сразу послеmap
возврата, если возвратmap
не назначен.forEach
, концептуально он по- прежнему будет более эффективным и лучше подходит для задач, в которых вам не нужно собирать результаты. И я не знаю, как вы, но в 2015 году я больше не занимался разработкой для IE8 (который, кстати, тоже не поддерживалmap
); и поддержка IE9 +forEach
. И фактически через месяц после моего ответа Microsoft прекратила поддержку этих браузеров.map
иforEach
вызовы будут возвращать только после того , как весь массив был петельные через и обратный вызов был вызван для каждого.источник
Основное отличие, которое вам нужно знать, - это
.map()
возвращает новый массив, а.forEach()
не возвращает . Вот почему вы видите такую разницу в выводе..forEach()
просто работает с каждым значением в массиве.Прочитать:
Array.prototype.forEach()
- JavaScript | MDNArray.prototype.map()
- JavaScript | MDNВы также можете проверить: -
Array.prototype.every()
- JavaScript | MDNисточник
forEach: если вы хотите выполнить действие над элементами массива, и оно будет таким же, как при использовании цикла for. Результат этого метода не дает нам выхода покупки, просто перебирает элементы.
map: если вы хотите выполнить действие с элементами массива, а также хотите сохранить результат своего действия в массиве. Это похоже на цикл for внутри функции, которая возвращает результат после каждой итерации.
Надеюсь это поможет.
источник
Разница в том, что они возвращают. После казни:
возвращает массив элементов, полученных в результате обработанной функции; пока:
возвращает undefined.
источник
Анализ производительности Циклы For работают быстрее, чем map или foreach, по мере увеличения количества элементов в массиве.
источник
map: 1642ms forEach: 885ms for: 748ms
Разница между Foreach и картой:
Map () : если вы используете карту, карта может вернуть новый массив, повторяя основной массив.
Foreach () : если вы используете Foreach, он не может ничего возвращать для каждой итерации основного массива.
useFul ссылка : используйте эту ссылку для понимания различий
https://codeburst.io/javascript-map-vs-foreach-f38111822c0f
источник
Следует отметить, что foreach пропускает неинициализированные значения, а map - нет.
источник
forEach () просто перебирает элементы. Он отбрасывает возвращаемые значения и всегда возвращает undefined. Результат этого метода не дает нам вывода.
Цикл map () по элементам выделяет память и сохраняет возвращаемые значения, повторяя основной массив
Пример:
источник
Карта неявно возвращается, а forEach - нет.
Вот почему, когда вы пишете JSX-приложение, вы почти всегда используете map вместо forEach для отображения контента в React .
источник
forEach () :
возвращаемое значение: undefined
originalArray: изменен после вызова метода
карта () :
возвращаемое значение: новый массив, заполненный результатами вызова предоставленной функции для каждого элемента в вызывающем массиве
originalArray: не изменяется после вызова метода
источник