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

5voto

shilovk Punkte 9225

Verwendung von Math.max() o Math.min()

Math.max(10, 20);   //  20
Math.min(-10, -20); // -20

Die folgende Funktion verwendet Function.prototype.apply() um das maximale Element in einem numerischen Feld zu finden. getMaxOfArray([1, 2, 3]) ist gleichbedeutend mit Math.max(1, 2, 3) , aber Sie können getMaxOfArray() auf programmatisch konstruierte Arrays beliebiger Größe.

function getMaxOfArray(numArray) {
  return Math.max.apply(null, numArray);
}

Oder mit dem neuen Spreizungsoperator wird es viel einfacher, das Maximum eines Arrays zu ermitteln.

var arr = [1, 2, 3];
var max = Math.max(...arr); // 3
var min = Math.min(...arr); // 1

5voto

Brian Punkte 3583

Eigentlich eine ganz einfache Sache.

var arr = [10,20,30,40];
arr.max = function() { return  Math.max.apply(Math, this); }; //attach max funct
arr.min = function() { return  Math.min.apply(Math, this); }; //attach min funct

alert("min: " + arr.min() + " max: " + arr.max());

4voto

andersh Punkte 7439

Wenn Sie die Bibliothek benutzen sugar.js können Sie schreiben arr.min() y arr.max() wie Sie vorschlagen. Sie können auch Min- und Max-Werte von nicht-numerischen Arrays erhalten.

min( map , all = false ) Gibt das Element im Array mit der niedrigsten Wert. map kann eine Funktion sein, die den zu prüfenden Wert abbildet, oder eine Zeichenkette sein, die als Abkürzung dient. Wenn all true ist, werden alle min Werte in einem Array zurück.

max( map , all = false ) Gibt das Element im Array mit der größten Wert. map kann eine Funktion sein, die den zu prüfenden Wert abbildet oder eine Zeichenkette sein, die als Abkürzung dient. Wenn all wahr ist, werden alle max Werte in einem Array zurück.

Beispiele:

[1,2,3].min() == 1
['fee','fo','fum'].min('length') == "fo"
['fee','fo','fum'].min('length', true) == ["fo"]
['fee','fo','fum'].min(function(n) { return n.length; }); == "fo"
[{a:3,a:2}].min(function(n) { return n['a']; }) == {"a":2}
['fee','fo','fum'].max('length', true) == ["fee","fum"]

Bibliotheken wie Lo-Dash y unterstrich.js bieten ebenfalls ähnlich leistungsfähige Min- und Max-Funktionen:

Beispiel von Lo-Dash:

_.max([4, 2, 8, 6]) == 8
var characters = [
  { 'name': 'barney', 'age': 36 },
  { 'name': 'fred',   'age': 40 }
];
_.max(characters, function(chr) { return chr.age; }) == { 'name': 'fred', 'age': 40 }

4voto

Kamil Kiełczewski Punkte 69048

Versuchen Sie

let max= a=> a.reduce((m,x)=> m>x ? m:x);
let min= a=> a.reduce((m,x)=> m<x ? m:x);

let max= a=> a.reduce((m,x)=> m>x ? m:x);
let min= a=> a.reduce((m,x)=> m<x ? m:x);

// TEST - pixel buffer
let arr = Array(200*800*4).fill(0); 
arr.forEach((x,i)=> arr[i]=100-i%101); 

console.log('Max', max(arr));
console.log('Min', min(arr))

Für Math.min/max (+Anwenden) erhalten wir einen Fehler:

Maximale Größe des Aufrufstapels überschritten (Chrome 74.0.3729.131)

// TEST - pixel buffer
let arr = Array(200*800*4).fill(0); 
arr.forEach((x,i)=> arr[i]=100-i%101); 

// Exception: Maximum call stack size exceeded

try {
  let max1= Math.max(...arr);          
} catch(e) { console.error('Math.max :', e.message) }

try {
  let max2= Math.max.apply(null, arr); 
} catch(e) { console.error('Math.max.apply :', e.message) }

// same for min

4voto

jay Punkte 10197

Die Lösung von ChaosPandion funktioniert, wenn Sie protoype verwenden. Wenn nicht, sollten Sie dies in Betracht ziehen:

Array.max = function( array ){
    return Math.max.apply( Math, array );
};

Array.min = function( array ){
    return Math.min.apply( Math, array );
};

Die obige Funktion gibt NaN zurück, wenn ein Array-Wert keine ganze Zahl ist, so dass Sie eine Funktionalität entwickeln sollten, um dies zu vermeiden. Ansonsten wird dies funktionieren.

0 Stimmen

Jeerose, warum haben Sie (Math, dies) als agruments wenn Roatin Marth hat nur (null, dies)?

0 Stimmen

@HankH: siehe meine Antwort auf Ihren Kommentar in einem Kommentar zu meiner eigenen Antwort.

1 Stimmen

Ich verstehe nicht, was Sie mit "Die Lösung von ChaosPandion funktioniert, wenn Sie protoype verwenden" meinen. Was ist der Unterschied zu deiner Lösung, außer dass du die Math Objekt als Kontext?

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