JavaScript/Objekte/Math/max
Der Methode max des Standardobjektes Math kann eine (fast[1]) beliebige Anzahl numerischer Werte übergeben werden und sie ermittelt, welcher der übergebenen Werte der Größte ist. Dieser Wert wird dann zurückgegeben.
Syntax
Math.max(value1, value2, ...)
Writable | true |
Enumerable | false |
Configurable | true |
Werden der Methode max keine Argumente übergeben, dann wird der Wert negative Infinity zurückgegeben und in dem Fall, dass ein Wert übergeben wird, der nicht vom Typ Number ist, ist der Rückgabewert NaN. Ansonsten wird von der Methode grundsätzlich der größte der beim Aufruf als Argument übergebenen numerischen Werte ermittelt und zurückgegeben.
function berechnen () {
const ausgabe = document.getElementById('Ausgabe'),
eingabe1 = document.getElementById('Eingabe1'),
eingabe2 = document.getElementById('Eingabe2');
let zahl = Math.max(eingabe1.value, eingabe2.value);
ausgabe.textContent = 'Die größere Zahl ist: ' + zahl;
}
Das Beispiel definiert ein Formular mit zwei Eingabefeldern und einem Button. Nach Eingabe je einer Zahl im ersten und im zweiten Eingabefeld und Klick auf den Button wird das Ergebnis ausgegeben. Das Ergebnis ist die Anwendung von max()
auf die Werte aus den beiden Eingabefeldern.
Maximum eines Arrays
Um das Maximum eines Arrays zu berechnen, muss max auf alle Werte des Arrays angewendet werden.
Bei Arrays mit weniger als „mehreren Zehntausend Elementen“[1] können die Array-Elemente an apply des Funktionsprototypen von max übergeben oder mit dem Spread-Operator ...
„gespreizt“ werden:
const zahlen = [1, 2, 5, 4];
// Function.prototype.apply
Math.max.apply(null, zahlen); // 5
// Spread-Operator
Math.max(...zahlen); // 5
Weil die Übergabe von Parametern an eine Funktion über den Stack erfolgt, dessen Größe begrenzt ist, wird für größere Arrays (bzw. im Allgemeinen) empfohlen[2], Array.prototype.reduce zu verwenden:
const zahlen = [1, 2, 5, 4];
if (zahlen.length > 0) {
let maximum = zahlen.reduce((a,p) => Math.max(a, p)); // 5
// mit dem Maximum weiterarbeiten
}
else {
// Sonderfall: Keine Daten für ein Maximum da
}
reduce
ohne Anfangswert auf ein leeres Array angewendet wird, bricht der Aufruf mit einem TypeError ab. Deshalb müssen Sie entweder den Fall des leeren Arrays getrennt behandeln oder einen mehr oder weniger sinnvollen Anfangswert wie -Infinity
als dritten Parameter von reduce
übergeben. Es hängt von Ihrem Programm ab, welcher dieser beiden Wege für Sie der bessere ist.