Wiem, że takich tematów było wiele. I znam podstawy: .forEach()
działa na oryginalnej tablicy i .map()
na nowej.
W moim przypadku:
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);
A to jest wyjście:
[ -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 ]
Nie mogę zrozumieć, dlaczego użycie practice
zmienia wartość b
do undefined
.
Przykro mi, jeśli to głupie pytanie, ale jestem całkiem nowy w tym języku, a odpowiedzi, które znalazłem do tej pory, nie zadowalały mnie.
javascript
arrays
loops
foreach
DzikiChrzan
źródło
źródło
.map
zwraca nową tablicę , ale.forEach
nic nie zwraca . Zasadniczo, jeśli chcesz uzyskać zmodyfikowaną postać poprzedniej tablicy, użyj.map
, jeśli nie chcesz tego, użyj.forEach
.Odpowiedzi:
Nie są jednym i tym samym. Pozwól mi wyjaśnić różnicę.
forEach
: Powoduje to iterację po liście i zastosowanie pewnych operacji z efektami ubocznymi do każdego elementu listy (przykład: zapisywanie każdego elementu listy do bazy danych)map
: Powoduje iterację po liście, przekształca każdego członka tej listy i zwraca inną listę o tym samym rozmiarze z przekształconymi składowymi (przykład: przekształcanie listy ciągów na wielkie litery)Bibliografia
Array.prototype.forEach () - JavaScript | MDN
Array.prototype.map () - JavaScript | MDN
źródło
Array.forEach
„Wykonuje podaną funkcję raz na element tablicy”.Array.map
„Tworzy nową tablicę z wynikami wywołania podanej funkcji na każdym elemencie tej tablicy”.Więc
forEach
tak naprawdę nic nie zwraca. Po prostu wywołuje funkcję dla każdego elementu tablicy i gotowe. Więc cokolwiek zwrócisz w ramach tej wywołanej funkcji, jest po prostu odrzucane.Z drugiej strony, w
map
podobny sposób wywoła funkcję dla każdego elementu tablicy, ale zamiast odrzucać jej wartość zwracaną, przechwyci ją i utworzy nową tablicę tych zwracanych wartości.To oznacza również, że mogłaby używać
map
gdziekolwiek używaszforEach
ale nadal nie należy robić, aby nie zbierać wartości zwracanych bez jakiegokolwiek celu. Po prostu skuteczniej jest ich nie zbierać, jeśli ich nie potrzebujesz.źródło
forEach
byłoby to „bardziej wydajne” niż wmap
przypadku, gdyby do obsługiforEach
starszej przeglądarki (IE8 lub 9) wymagany był wypełniacz polyfill . Nie musisz przypisywać zwrotumap
niczego; wartość zwracana powinna zostać usunięta natychmiast pomap
zwróceniu, gdy zwrotmap
nie jest przypisany.forEach
będzie koncepcyjnie być jeszcze bardziej skuteczne i lepiej nadaje się do zadań, gdzie nie potrzeba gromadzenia wyników. I nie wiem jak wy, ale w 2015 roku nie tworzyłem już dla IE8 (co zresztą też nie wspierałomap
); i IE9 +forEach
. I faktycznie miesiąc po mojej odpowiedzi Microsoft zakończył wsparcie dla tych przeglądarek.map
iforEach
wywołanie zwróci tylko raz cała tablica została przelotowe i zwrotna została wywołana dla każdego.źródło
Główna różnica, którą musisz wiedzieć, to
.map()
zwraca nową tablicę, a.forEach()
nie. Dlatego widzisz tę różnicę w wynikach..forEach()
po prostu działa na każdej wartości w tablicy.Zaznajomić się:
Array.prototype.forEach()
- JavaScript | MDNArray.prototype.map()
- JavaScript | MDNMożesz także sprawdzić: -
Array.prototype.every()
- JavaScript | MDNźródło
forEach: Jeśli chcesz wykonać akcję na elementach Array i jest to takie samo, jak w przypadku pętli for. Wynik tej metody nie daje nam wyjścia kupna tylko pętla przez elementy.
map: Jeśli chcesz wykonać akcję na elementach tablicy, a także chcesz zapisać dane wyjściowe akcji w tablicy. Jest to podobne do pętli for w funkcji, która zwraca wynik po każdej iteracji.
Mam nadzieję że to pomoże.
źródło
Różnica polega na tym, co zwracają. Po wykonaniu:
zwraca tablicę elementów wynikających z przetwarzanej funkcji; podczas:
zwraca undefined.
źródło
Analiza wydajności Pętle For działają szybciej niż mapowanie lub foreach, gdy liczba elementów w tablicy wzrasta.
źródło
map: 1642ms forEach: 885ms for: 748ms
Różnica między Foreach a mapą:
Mapa() : Jeśli używasz map, to map może zwrócić nową tablicę przez iterację głównej tablicy.
Foreach () : Jeśli używasz Foreach, to nie może zwrócić niczego dla każdej iteracyjnej tablicy głównej.
link useFul : użyj tego linku, aby zrozumieć różnice
https://codeburst.io/javascript-map-vs-foreach-f38111822c0f
źródło
Należy zwrócić uwagę na to, że foreach pomija niezainicjowane wartości, podczas gdy map nie.
źródło
dla każdego() po prostu elementy. Odrzuca zwracane wartości i zawsze zwraca undefined. Rezultat tej metody nie daje nam wyniku.
map () pętla przez elementy przydziela pamięć i przechowuje wartości zwracane przez iterację tablicy głównej
Przykład:
źródło
Map niejawnie zwraca, podczas gdy forEach nie.
To dlatego, kiedy kodujesz aplikację JSX, prawie zawsze używasz map zamiast forEach do wyświetlania treści w React .
źródło
forEach () :
zwracana wartość: niezdefiniowana
originalArray: zmodyfikowana po wywołaniu metody
mapa () :
zwracana wartość: nowa Tablica wypełniona wynikami wywołania podanej funkcji na każdym elemencie wywołującej tablicy
originalArray: nie modyfikowana po wywołaniu metody
źródło