2012-06-25 20 views
10

Normalerweise, wenn ich den maximalen Wert eines Arrays finden muss ich diesen sehr einfachen Code verwenden: var max = Math.max.apply(Math, array);Javascript max() für Array-Spalte

aber jetzt habe ich ein mehrdimensionales Array, in dem für jede Zeile Ich habe ein Array mit 5 Spalten. Gibt es eine ähnliche Möglichkeit, den Maximalwert für eine bestimmte Spalte zu finden? Im Moment ist ich tun:

var maxFunc = function(data){ 
    var max = 0; 
    data.forEach(function(value){ 
     max = Math.max(max, value[0]); 
    }); 
    return max; 
}; 

Ich war neugierig, wenn es ein schönerer/einfacherer Weg, dies zu tun?

Antwort

12

Ich würde es als solche schreiben:

Math.max.apply(Math, array.map(function(v) { 
    return v[0]; 
})); 

Die array.map wird die ursprüngliche Array-Logik auf der Grundlage Ihrer Kommissionierung verwandeln, in diesem Fall das erste Element zurück. Der transformierte Array wird dann in gefüttert Math.max()

9

Dies ist eine große Anwendung für Array.prototype.reduce:

max = data.reduce(function(previousVal, currentItem, i, arr) { 
    return Math.max(previousVal, currentItem[0]); 
}, Number.NEGATIVE_INFINITY); 

Dies vermeidet auch den Fehler im Code, was passieren würde, wenn alle Werte in data weniger als 0. Sie sollten gegen Number.NEGATIVE_INFINITY statt 0 vergleichen.

Alternativ können Sie die Daten, bevor Reduzierung auf den Maximalwert normalisieren:

max = data.map(function (d) { 
    return d[0]; 
}).reduce(function (p, c, i, arr) { 
    return Math.max(p, c); 
});