2012-06-25 21 views
10

Di solito, quando ho bisogno di trovare il valore massimo di un array io uso questo codice molto semplice: var max = Math.max.apply(Math, array);Javascript max() per la colonna di matrice

Tuttavia, ora ho un array multidimensionale in cui per ogni linea che ho una matrice con 5 colonne. C'è un modo simile per trovare il valore massimo per una determinata colonna? In questo momento sto facendo:

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

ero curioso di sapere se ci fosse un/modo più semplice più bello di fare questo?

risposta

12

vorrei scrivere come tale:

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

Il array.map trasformerà la matrice originale in base alla logica di prelievo, restituendo la prima voce in questo caso. La matrice viene poi trasformata immessa nella Math.max()

9

Questa è una grande domanda di Array.prototype.reduce:

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

questo modo si evita anche il bug nel codice che accadrebbe se tutti i valori in data sono meno di 0. Dovresti confrontarti con anziché con lo 0.

In alternativa, è possibile normalizzare i dati prima di ridurre al valore massimo:

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