Większość przypadków użycia metody reduce() można z łatwością przepisać za pomocą pętli for. Testowanie w JSPerf pokazuje, że funkcja reduce() jest zwykle wolniejsza o 60% -75%, w zależności od operacji wykonywanych w każdej iteracji.Czy jest jakaś realna korzyść z używania metody javascript Array reduce()?
Czy istnieje prawdziwy powód, by używać funkcji reduce(), poza możliwością pisania kodu w "stylu funkcjonalnym"? Jeśli możesz uzyskać 60% wzrost wydajności, pisząc nieco więcej kodu, dlaczego używałbyś funkcji reduce()?
EDYCJA: W rzeczywistości inne metody funkcjonalne, takie jak forEach() i map(), wszystkie wykazują podobną wydajność, będąc co najmniej 60% wolniejszą niż proste dla pętli.
Oto link do testu JSPerf (z wywołań funkcji): forloop vs forEach
Nie zgadzam się z tobą co do tego, co stanowi poprawne porównanie wyników. Pierwszym jest poprawne porównanie, ponieważ na pewno (na przykład) pytanie brzmi: "Która metoda jest najszybsza w dodawaniu jednego do każdego elementu tablicy?", A nie "Która metoda jest najszybsza, ale jakakolwiek metoda nie używająca funkcji jest zdyskwalifikowana z wpisu ". Zgadzam się, że jeśli założysz, że chcesz mieć jakąś funkcję do celów ustalania zakresu/zamknięcia, to równie dobrze możesz użyć '.reduce()' lub '.forEach()' lub cokolwiek innego. – nnnnnn
Pytanie dotyczy dokładnie składni, więc jest to poprawne porównanie wydajności. Być może powinienem przeformułować pytanie w scenariuszu, w którym chcesz wycisnąć każdy możliwy kawałek wydajności. W takim przypadku nie mogę znaleźć dobrego powodu, aby nie używać zwykłej pętli for. Czy możesz podać konkretny przykład, w którym konieczne jest ustalenie zakresu? –
@EvanYou: '[1,2,3].forEach (function (x) {setTimeout (function() {alert (x)}, 1000)}) '(alert 1,2,3) versus' for (var i = 0; i <4; i ++) {setTimeout (function() {alert (i)}, 1000)} '(alerty 4,4,4) – ninjagecko