2012-06-25 27 views
10

Zazwyczaj kiedy trzeba znaleźć wartość max tablicy Używam tego bardzo prosty kod: var max = Math.max.apply(Math, array);JavaScript max() na kolumnie tablicy

Jednak teraz mam tablicę wielowymiarową, w którym dla każdej linii mam tablica z 5 kolumnami. Czy istnieje podobny sposób znalezienia maksymalnej wartości dla określonej kolumny? Teraz robię:

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

Byłem ciekaw, czy nie było ładniej/prostszy sposób to zrobić?

Odpowiedz

12

chciałbym napisać go jako takie:

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

array.map przekształci oryginalną tablicę opartą na logice kompletacji, zwracając pierwszy przedmiot w tej sprawie. Przekształcona tablica jest następnie podawany do Math.max()

9

Jest to świetna aplikacja dla Array.prototype.reduce:

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

ten sposób unika się również błędów w kodzie, które stałoby się, gdyby wszystkie wartości w data mniej niż 0. Powinieneś raczej porównywać z Number.NEGATIVE_INFINITY niż z 0.

Alternatywnie, można normalizować dane przed zmniejszeniem wartości MAX:

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