Ich versuche eine offensichtliche Aufgabe:
%Vor%und erhalten:
%Vor%als Ergebnis. Damit es funktioniert, muss ich auf diese Weise anonym arbeiten:
%Vor%Könnte mir jemand sagen warum ? Beide sind Funktionen, die zwei Argumente annehmen und beide einen Wert zurückgeben. Was ist der Unterschied?
Ein anderes Beispiel könnte das sein:
%Vor%Das Ergebnis ist:
%Vor%Ich kann dieses Beispiel in node.js nur unter dieser Form ausführen (Array hat keine concat in node.js v4.12, die ich jetzt verwende):
%Vor%und dann:
%Vor%Und warum ist das?
Die an reduce
übergebene Funktion benötigt mehr als 2 Argumente :
previousValue
currentValue
index
array
Math.max
wertet alle Argumente aus und gibt die höchste zurück:
Wenn also Math.max
an reduce
übergeben wird, wird der höchste Wert aus den 4 übergebenen Argumenten zurückgegeben, von denen einer ein Array ist. Wenn ein Array übergeben wird, wird Math.max
return NaN
zurückgegeben, weil ein Array keine Zahl ist. Dies ist in den Spezifikationen (15.8.2.11):
Gibt null oder mehr Argumente an, ruft ToNumber für jedes der Argumente auf und gibt den größten der resultierenden Werte zurück.
...
Wenn ein Wert NaN ist, ist das Ergebnis NaN
ToNumber
gibt NaN
für ein Array zurück.
Wenn Sie also mit Math.max
reduzieren, erhalten Sie am Ende NaN
zurück.
Da Math.max
mehrere Argumente akzeptiert, können Sie das Array einfach über die Funktion apply
in eine Parameterliste konvertieren.
Siehe Warnungen hier zu den Einschränkungen dieser Technik.
Tags und Links javascript node.js higher-order-functions reduce