2016-09-02 3 views
0

Wie kann ich einfach die minimalen und maximalen Werte von einem sehr großen JavaScript-Array (z. B. 250 Tausend Zahlen) erhalten?JavaScript: Min & Max Werte in sehr großen Array?

Ich habe versucht, diese Methode zu verwenden, aber es funktioniert nicht: JavaScript: min & max Array values?

Ich bin das Debuggen in Visual Studio, wo ich einen Fehler nicht bekommen, während im Browser I „Maximale Call-Stack-Größe überschritten“ erhalten .

Beispielcode:

var max = Math.max.apply(-Infinity, arr); 
var min = Math.min.apply(Infinity, arr); 

"arr" ist mein sehr großes Array.

+0

Zunächst erstes Argument gelten soll Kontext. Es sollte "null" oder "das" sein. Zweitens können Sie immer wieder zur benutzerdefinierten for-Schleife zurückkehren. Das ist die sicherste Option – Rajesh

+0

Was ist das Problem mit Ihrem Code? In meinem Chrom funktioniert. – pietro909

+0

für mich funktioniert der Code auch, welchen Browser benutzen Sie? –

Antwort

0

Es ist für mich arbeiten

var min = Math.min.apply(Math, array); 
var max = Math.max.apply(Math, array); 
+0

Ich habe versucht, mit Null, dies oder Math, und der Effekt ist immer der gleiche. Sind Sie sicher, dass Sie versucht haben, es in einem so großen Array zu verwenden, wie ich es beschrieben habe? Weil dieser Code mit kleineren Tabellen funktioniert (ich habe es mit 65K Elementen versucht). – PAPP

+0

Ich habe nicht versucht mit großen Arrays, lassen Sie mich einmal überprüfen @ PAPP –

+0

Es gibt keine Garantie, wenn Sie Argumente in der Größenordnung von 150-300 K übergeben müssen, dass Sie Stack-Überlauf je nach Browsersitzung nicht erhalten. Große Arrays können nicht mit 'Math.min()' oder 'Math.max()' erstellt werden – Redu

0

Für große Arrays von den genannten Größen nicht Math.min() oder Math.max() sicher in Ordnung verwenden können. Ich glaube, so sollte es gemacht werden.

var arr = new Array(1000000).fill().map(_=> ~~(Math.random()*10000000)), 
 
findMax = a => a.reduce((res,cur) => res < cur ? cur : res ,-Infinity); 
 
console.log(findMax(arr));