2012-06-25 14 views
10

ため通常: var max = Math.max.apply(Math, array);JavascriptをMAX()私は、この非常に単純なコードを使用し、配列の最大値を見つける必要があるとき、配列列

をしかし、今私は行ごとに私が持っている多次元配列を持っています5列の配列特定の列の最大値を見つけるのと同じ方法がありますか? は、今私がやっている:

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

をこれを行うのきれい/簡単な方法があった場合、私は興味がありましたか?

答えて

12

私はそのように記述します。

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

array.mapは、この場合には最初の項目を返す、あなたのピッキング論理に基づいて元の配列を変換します。変換配列は、その後、これはArray.prototype.reduceのための素晴らしいアプリケーションですMath.max()

9

に供給されています

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

これもdata内のすべての値が0未満である場合に起こるでしょう、あなたのコードのバグを回避することができます。 0ではなく、Number.NEGATIVE_INFINITYと比較する必要があります。

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

あるいは、最大値に減少する前にデータを正規化することができ

関連する問題