1179 Stimmen

Finden Sie das Min/Max-Element eines Arrays in JavaScript

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

178 Stimmen

Anmerkung: Mit ECMAScript 6 können Sie die neue Spread-Operator (drei Punkte: ... ) mit Math.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])

14voto

Fuad Ibrahimov Punkte 462

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.

14voto

ChaosPandion Punkte 75527

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;
}

0 Stimmen

Sie sollten Ihr v mit 'this[0]' initialisieren, falls keine Zahlen kleiner als 0 sind

0 Stimmen

Ist comparer in einem bestimmten Bereich aufgerufen werden soll? Denn so wie es ist, verweist es auf this[index] das ist undefined jedes Mal.

0 Stimmen

Festgefahren, ich vergesse immer das Scoping auf Funktionsebene.

12voto

Ionut Punkte 10657

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);

0 Stimmen

0 Stimmen

Danke. Ich habe meine Antwort geändert.

0 Stimmen

Die Iteration ist immer noch falsch (Zugriff auf nicht existierende Eigenschaften).

12voto

Trilok Singh Punkte 969

Let array = [267, 306, 108] let longest = Math.max(...array);

2 Stimmen

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.

10voto

Peter Punkte 5010

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.com

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.

Powered by:

X