Wie kann ich leicht erhalten die minimale oder maximale Element eines JavaScript-Array?
Beispiel Pseudocode:
let array = [100, 0, 50]
array.min() //=> 0
array.max() //=> 100
Wie kann ich leicht erhalten die minimale oder maximale Element eines JavaScript-Array?
Beispiel Pseudocode:
let array = [100, 0, 50]
array.min() //=> 0
array.max() //=> 100
https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/max
function getMaxOfArray(numArray) {
return Math.max.apply(null, numArray);
}
var arr = [100, 0, 50];
console.log(getMaxOfArray(arr))
Das hat bei mir funktioniert.
Dies mag für Ihre Zwecke geeignet sein.
Array.prototype.min = function(comparer) {
if (this.length === 0) return null;
if (this.length === 1) return this[0];
comparer = (comparer || Math.min);
var v = this[0];
for (var i = 1; i < this.length; i++) {
v = comparer(this[i], v);
}
return v;
}
Array.prototype.max = function(comparer) {
if (this.length === 0) return null;
if (this.length === 1) return this[0];
comparer = (comparer || Math.max);
var v = this[0];
for (var i = 1; i < this.length; i++) {
v = comparer(this[i], v);
}
return v;
}
Ist comparer
in einem bestimmten Bereich aufgerufen werden soll? Denn so wie es ist, verweist es auf this[index]
das ist undefined
jedes Mal.
Ich dachte, ich teile meine einfache und leicht verständliche Lösung.
Für die min:
var arr = [3, 4, 12, 1, 0, 5];
var min = arr[0];
for (var k = 1; k < arr.length; k++) {
if (arr[k] < min) {
min = arr[k];
}
}
console.log("Min is: " + min);
Und für die max:
var arr = [3, 4, 12, 1, 0, 5];
var max = arr[0];
for (var k = 1; k < arr.length; k++) {
if (arr[k] > max) {
max = arr[k];
}
}
console.log("Max is: " + max);
Genau dieser Ansatz wurde bereits erwähnt in totymedli's Antwort , C.K.'s Antwort , Abdennour TOUMI's Antwort , shilovk's Antwort ohne Berücksichtigung aller gelöschten Antworten. Ihre (unformatierte) Antwort trägt nichts bei.
Für große Arrays (~10 Elemente), Math.min
y Math.max
löst einen RangeError (Maximale Aufrufstapelgröße überschritten) in node.js aus.
Für große Arrays gibt es eine schnelle und schmutzige Lösung:
Array.prototype.min = function() {
var r = this[0];
this.forEach(function(v,i,a){if (v<r) r=v;});
return r;
};
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
178 Stimmen
Anmerkung: Mit ECMAScript 6 können Sie die neue Spread-Operator (drei Punkte:
...
) mitMath.max()
wie diese:Math.max(...[2, 5, 16, 1])
. Siehe meine Antwort aus dem MDN-Dokumentation .0 Stimmen
Hier ein Benchmark für einen Geschwindigkeitsvergleich der gebräuchlichsten Vorgehensweisen: jsben.ch/#/1QuTg
0 Stimmen
Ohne ES6
Math.max.apply(null, [2,5,16,1])
2 Stimmen
In ES6 können sowohl das Maximum als auch das Minimum wie folgt ermittelt werden mit nur einem
reduce
aufrufen .0 Stimmen
Die Lösung von @totymedli, den Spread-Operator zu verwenden, ist keine gute Idee. Wenn das Array zu groß ist, führt dies zu einer Stack Overflow Exception (zu viele Parameter werden an die Funktion übergeben). Eine viel bessere Idee ist die Verwendung von
reduce
1 Stimmen
@AronFiechter Haben Sie meine Antwort tatsächlich gelesen? Ich erkläre alle Optionen sehr detailliert mit Codebeispielen und Benchmarks. Die Größe des Aufrufstapels ist nur dann ein Problem, wenn Ihre Arrays eine Größe von mehr als 100000 haben. Der Aufrufstapel muss zwar berücksichtigt werden, aber in den meisten Fällen ist er kein Problem und der prägnantere Code überwiegt die Nachteile.
1 Stimmen
Dieser Aufrufstapel kann ein Problem darstellen. Es gibt eine HackerRank-Frage, bei der Min und Max gefunden werden müssen, und die Tests laufen unter einem Limit von 10 Sekunden. Die von HackerRank für den 9. bis 14. Test übergebenen Arrays haben eine Länge von mehr als 100.000 und schlagen fehl, wenn die reduzierte Lösung in der Antwort unten verwendet wird. Die for-Schleife wird für einige
0 Stimmen
Utilice
...
(Spread-Operator):const maxValue = Math.max(...array))