Zawsze się zastanawiałem, jaka jest różnica między nimi. Wydaje się, że wszyscy robią to samo ...
Zawsze się zastanawiałem, jaka jest różnica między nimi. Wydaje się, że wszyscy robią to samo ...
Odpowiedzi:
Różnica dotyczy wartości zwracanych.
.map()
zwraca nową tablicę obiektów utworzonych przez wykonanie jakiejś czynności na oryginalnym elemencie.
.every()
zwraca wartość logiczną - true, jeśli każdy element w tej tablicy spełnia podaną funkcję testującą. Ważną różnicą .every()
jest to, że funkcja test nie zawsze może być wywoływana dla każdego elementu tablicy. Gdy funkcja testująca zwróci wartość false dla dowolnego elementu, żadne elementy tablicy nie będą już iterowane. Dlatego funkcja testowania zwykle nie powinna powodować skutków ubocznych .
.forEach()
nic nie zwraca - iteruje Array wykonując daną akcję dla każdego elementu w Array.
Przeczytaj o tych i wielu innych metodach iteracji Array w MDN .
Odpowiedź gilly3 jest świetna. Chciałem tylko dodać trochę informacji o innych typach funkcji „pętli przez elementy”.
.every()
(przestaje się zapętlać za pierwszym razem, gdy iterator zwraca fałsz lub coś nie działa).some()
(przestaje się zapętlać za pierwszym razem, gdy iterator zwraca prawdę lub coś prawdziwego).filter()
(tworzy nową tablicę zawierającą elementy, w których funkcja filtrująca zwraca true i pomijając te, w których zwraca false).map()
(tworzy nową tablicę z wartości zwracanych przez funkcję iteratora).reduce()
(buduje wartość przez wielokrotne wywoływanie iteratora, przekazanie poprzednich wartości; szczegółowe informacje można znaleźć w specyfikacji; przydatne do sumowania zawartości tablicy i wielu innych rzeczy).reduceRight()
(jak redukuj, ale działa w porządku malejącym, a nie rosnącym)kredyt dla: TJCrowder For-each w tablicy w JavaScript?
Kolejną kwestią dotyczącą powyższych świetnych odpowiedzi jest łańcuch. Z forEach () nie możesz łączyć, ale z map () możesz.
Na przykład:
var arrayNumbers = [3,1,2,4,5];
arrayNumbers.map(function(i) {
return i * 2
}).sort();
z .forEach () nie możesz wykonać .sort (), pojawi się błąd.
W przypadku Ramdy różnica między R.map()
i R.forEach()
to:
R.forEach()
zwraca oryginalną tablicę, podczas gdy R.map()
zwraca funktorR.forEach()
może działać tylko na tablicy, ale R.map()
może również działać na obiekcie (tj. pary klucz / wartość obiektu są traktowane jak tablica)
every
iforEach
nie są metodami jQuery, myślę, że jest mało prawdopodobne, aby pytanie dotyczyło jQuery w jakikolwiek sposób. developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.6