2012-06-25 22 views
10

Genellikle: Ancak var max = Math.max.apply(Math, array);JavaScript maks()

, şimdi ben her bir çizgi için olan çok boyutlu bir dizi bilgisi 5 sütun içeren bir dizi. Belirli bir sütun için maksimum değeri bulmak için benzer bir yolu var mı? Şu anda yapıyorum:

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

Bunu yapmanın daha güzel bir/basit bir yolu olup olmadığını merak ediyordum?

cevap

12

ben bu şekilde yazardı:

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

array.map bu durumda ilk ürünü iade, sizin toplama mantığı dayalı orijinal diziyi değiştirecek. dönüştürülmüş dizi daha sonra bu Array.prototype.reduce için büyük bir uygulamadır Math.max()

9

içine beslenir:

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

Bu aynı zamanda data tüm değerler 0 daha az ne olurdu Kodunuzdaki hata önler. 0 yerine Number.NEGATIVE_INFINITY ile karşılaştırmalısınız.

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

Alternatif olarak, maksimum değere azaltılması önce verileri normalleştirmek olabilir

İlgili konular