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

Yene Mulatu Punkte 2136

Ein einfaches Objekt erstellen

var myArray = new Array();

myArray = [10,12,14,100];

var getMaxHeight = {
     hight : function( array ){ return Math.max.apply( Math, array );
}

getMaxHeight.hight(myArray);

1 Stimmen

Warum braucht man dafür eigentlich ein Objekt? Es ist doch nur eine Funktion, die Sie am Ende verwenden. Und warum definieren Sie Ihr Array zweimal?

0 Stimmen

Die Hauptlösung ist hier nicht die Array-Erstellungskonvention oder die Zuweisung von Werten an eine Variable. Sie können Array in jeder beliebigen Form erstellen und den Wert zuweisen, wie Sie möchten.

0 Stimmen

Ich weiß, es ist nicht die wichtigste Lösung . Tatsächlich ist es nicht einmal Teil der Lösung. Wenn es so wäre, hätte ich dich vielleicht runtergevotet, aber das habe ich nicht. Ich war nur neugierig, warum Sie den Code auf diese Weise geschrieben haben.

0voto

Eugen Sunic Punkte 12101

Eine rekursive Lösung des Problems

const findMinMax = (arr, max, min, i) => arr.length === i ? {
    min,
    max
  } :
  findMinMax(
    arr,
    arr[i] > max ? arr[i] : max,
    arr[i] < min ? arr[i] : min,
    ++i)

const arr = [5, 34, 2, 1, 6, 7, 9, 3];
const max = findMinMax(arr, arr[0], arr[1], 0)
console.log(max);

0voto

test30 Punkte 3166

Linearer, fast rein funktionaler Ansatz

var min=[0, 29, 25].map((function(max) {max=-Infinity; return function(e) {return max=Math.max(max, e);}})())[0]

Weitere Beispiele:

Herausfinden min Wert

function getMin(arr) {
    return (ar || [0, 29, 25]).
        map((function(max) {max=-Infinity; return function(e) {return max=Math.max(max, e);}})())[0];
}

oder mit Array.map Methode mit variabler Schließung

function getMin(arrObjs) {
    return (arrObjs || [{val: 0}, {val: 29}, {val: 25}]).
        map((function(max) {max=-Infinity; return function(e) {return max=(max.val>e.val?max:e);}})())[0];
}

Herausfinden max Wert

function getMax(arr) {
    return (ar || [0, 29, 25]).
        map((function(v) {v=Infinity; return function(e) {return v=Math.min(v, e);}})())[0];
}

für Array von Objekten

function getMax(arrObjs) {
    return (arrObjs || [{val: 0}, {val: 29}, {val: 25}]).
        map((function(v) {v=-Infinity; return function(e) {return v=(v.val<e.val?v:e);}})())[0];
}

0voto

micahblu Punkte 4376

Möglicherweise möchten Sie dem Array-Prototyp keine Methoden hinzufügen, die mit anderen Bibliotheken in Konflikt geraten könnten.

Ich habe gesehen, eine Menge von Beispielen verwenden forEach, die ich nicht für große Arrays aufgrund seiner schlechten Leistung gegenüber einer for-Schleife empfehlen würde. https://coderwall.com/p/kvzbpa/don-t-use-array-foreach-use-for-instead

Auch Math.max(Math, [1,2,3]); Ich bekomme immer NaN?

function minArray(a) {
  var min=a[0]; for(var i=0,j=a.length;i<j;i++){min=a[i]<min?a[i]:min;}
  return min;
}

function maxArray(a) {
  var max=a[0]; for(var i=0,j=a.length;i<j;i++){max=a[i]>max?a[i]:max;}
  return max;
}

minArray([1,2,3]); // returns 1

Wenn Sie ein Array von Objekten haben, akzeptiert die Funktion minArray() 2 Parameter, der erste ist das Array und der zweite ist der Schlüsselname für den zu vergleichenden Objektschlüsselwert. Die Funktion würde in diesem Fall den Index des Arrays zurückgeben, der den kleinsten angegebenen Schlüsselwert hat.

function minArray(a, key) {
  var min, i, j, index=0;
  if(!key) {
    min=a[0]; 
    for(i=0,j=a.length;i<j;i++){min=a[i]<min?a[i]:min;}
    return min;
  }
  min=a[0][key];
  for(i=0,j=a.length;i<j;i++){
    if(a[i][key]<min) {
      min = a[i][key];
      index = i;
    }
  }
    return index;
}

var a = [{fee: 9}, {fee: 2}, {fee: 5}];

minArray(a, "fee"); // returns 1, as 1 is the proper array index for the 2nd array element.

0 Stimmen

Warum ist dies die beste Antwort? Die erste Antwort sollte lauten stackoverflow.com/a/1669222/390014

0 Stimmen

Ja, ich würde zustimmen, um die Math.min.apply() für die Suche nach der minimalen primitive Array-Wert zu verwenden, ich erinnere mich an Kommentare zu sehen, die den Aufruf anwenden weglassen, die mir die Null-Antwort gab, weshalb ich mit der ersten Lösung kam. Obwohl meine zweite Lösung sollte immer noch Verdienst für Objekt-Arrays halten, natürlich, es sei denn, es gibt eine bessere ein :)

0voto

Vin.X Punkte 4691

Wenn Sie ein komplexes Objekt haben, können Sie sort.... verwenden, z. B.: Wenn ich ein Element erhalten möchte, das den MAX/MIN-Wert der folgenden Objekte enthält.

var objs= [
{name:"Apple",value:3},
{name:"Love",value:32},
{name:"Cheese",value:1},
{name:"Pork",value:77},
{name:"Xmas",value:99}        
];

Ich werde eine Auswahl treffen:

objs.sort(function(a, b){return a.value-b.value});

Dann: objs[0] ist das MIN, objs[objs.length-1] ist der MAX.

0 Stimmen

Die sort das Array tatsächlich aktualisieren, wie in der Antwort von @Ben erwähnt. OP ist nur über das Erhalten der min/max Wert.

0 Stimmen

Sie könnten eine Kopie des aktuellen Arrays erstellen, es sortieren und Min/Max erhalten. Ein paar zusätzliche Zeilen Code. Wie auch immer, ich habe gerade versucht, eine alternative Lösung zu posten. lol. Und das Array, an dem ich gearbeitet habe, hat 3 Ebenen von Objekten, ich muss min/max aus der 2ten Ebene holen. Es war nicht nur, um min/max von single valued array zu erhalten.

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