2012-06-25 30 views
10

Thông thường khi tôi cần phải tìm giá trị tối đa của một mảng tôi sử dụng mã rất đơn giản này: var max = Math.max.apply(Math, array);Javascript max() cho cột mảng

Tuy nhiên, bây giờ tôi có một mảng đa chiều trong đó cho mỗi dòng tôi có một mảng với 5 cột. Có cách nào tương tự để tìm giá trị tối đa cho một cột nhất định không? Ngay bây giờ tôi đang làm:

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

Tôi tò mò muốn có cách làm đơn giản hơn hay đơn giản hơn?

Trả lời

12

tôi sẽ viết nó như vậy:

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

Các array.map sẽ làm thay đổi mảng ban đầu dựa trên logic hái của bạn, trở về mục đầu tiên trong trường hợp này. Sau đó, mảng chuyển được đưa vào Math.max()

9

Đây là một ứng dụng tuyệt vời cho Array.prototype.reduce:

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

này cũng tránh được các lỗi trong mã của bạn mà sẽ xảy ra nếu tất cả các giá trị trong data ít hơn 0. Bạn nên so sánh với Number.NEGATIVE_INFINITY thay vì 0.

Ngoài ra, bạn có thể chuẩn hóa dữ liệu trước khi giảm đến giá trị tối đa:

max = data.map(function (d) { 
    return d[0]; 
}).reduce(function (p, c, i, arr) { 
    return Math.max(p, c); 
}); 
Các vấn đề liên quan