2012-06-25 18 views
10

lo general, cuando tengo que encontrar el valor máximo de una matriz que utilizo este código muy simple: var max = Math.max.apply(Math, array);Javascript max() para la columna de matriz

Sin embargo, ahora tengo una matriz multidimensional en el que para cada línea que tengo una matriz con 5 columnas. ¿Hay alguna manera similar de encontrar el valor máximo para una determinada columna? En este momento estoy haciendo:

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

tenía curiosidad si había una manera más bonito/más simple de hacer esto?

Respuesta

12

lo escribiría como tal:

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

El array.map va a transformar la matriz original basado en la lógica de su recolección, volviendo el primer elemento en este caso. La matriz transformada se introduce en Math.max()

9

Ésta es una gran aplicación para Array.prototype.reduce:

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

Esto también evita el error en el código que pasaría si todos los valores en data están a menos de 0. Debe comparar con Number.NEGATIVE_INFINITY en lugar de 0.

Como alternativa, puede normalizar los datos antes de reducir al valor máximo:

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