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

1voto

Bhumit 070 Punkte 330

Nun, ich möchte dies auf folgende Weise tun

const findMaxAndMin = (arr) => {
  if (arr.length <= 0) return -1;
  let min = arr[0];
  let max = arr[0];
  arr.forEach((n) => {
    n > max ? (max = n) : false;
    n < min ? (min = n) : false;
  });
  return [min, max];
};

0 Stimmen

Es gibt keinen Grund für die Verwendung von map wenn Sie die Ausgabe nicht verwenden. Erwägen Sie die Verwendung forEach stattdessen?

1voto

Pablo Punkte 1003

Sie können Array.sort verwenden, aber Sie müssen eine einfache Zahlensortierfunktion schreiben, da die Standardeinstellung alphabetisch ist.

Sehen Sie sich Beispiel 2 an.

Dann können Sie sich arr[0] y arr[arr.length-1] um Minimum und Maximum zu erhalten.

0 Stimmen

Die Frage bezieht sich auf Min/Max, nicht auf die Sortierung.

2 Stimmen

@Ates Goral - sicherlich, aber Sie können sicher verstehen, dass eine sortierte Liste O(1) Zugriff auf die Min- und Max-Werte ermöglicht, ja?

3 Stimmen

In Bezug auf die Leistung würde die Sorte viel mehr Auswechslungen mit sich bringen. Das muss in Betracht gezogen werden.

1voto

Rahul Mankar Punkte 800

Das folgende Skript funktionierte bei mir in ndoejs:

 var numbers = [1, 2, 3, 4];
 console.log('Value:: ' + Math.max.apply(null, numbers) ); // 4

1voto

lepe Punkte 23471

Um zu verhindern, dass "max" und "min" in einer "for ... in"-Schleife aufgeführt werden:

Object.defineProperty(Array.prototype, "max", {
    enumerable: false,
    configurable: false,
    writable: false,    
    value: function() {
        return Math.max.apply(null, this);
    }
});
Object.defineProperty(Array.prototype, "min", {
    enumerable: false,
    configurable: false,
    writable: false,    
    value: function() {
        return Math.min.apply(null, this);
    }
});

Verwendung:

var x = [10,23,44,21,5];
x.max(); //44
x.min(); //5

1voto

fearless_fool Punkte 31331

Ich mag Linus' reduce()-Ansatz insbesondere bei großen Arrays. Aber solange Sie wissen, dass Sie sowohl den Minimalwert als auch den Maximalwert benötigen, warum sollten Sie das Array zweimal durchlaufen?

Array.prototype.minmax = function () {
  return this.reduce(function (p, v) {
    return [(p[0] < v ? p[0] : v), (p[1] > v ? p[1] : v)];
  }, [this[0], this[0]]);
}

Wenn Sie den iterativen Ansatz bevorzugen, können Sie natürlich auch das tun:

Array.prototype.minmax = function () {
    var mn = this[0], mx = this[0];
    this.forEach(function (v) {
        if (v < mn) mn = v;
        if (v > mx) mx = v;
    });
    return [mn, mx];
};

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