2012-01-12 60 views
5

Cách nào là cách thanh lịch để tìm giá trị tối đa của đối tượng con trong javascript?tìm giá trị tối đa của đối tượng con

Ví dụ:

tìm giá trị số lượng tối đa của đối tượng này (ở đây hiển thị như json):

{"density":[ 
    {"price":1.22837, "quantity":48201}, 
    {"price":1.39837, "quantity":28201}, 
    {"price":1.40107, "quantity":127011}, 
    {"price":1.5174, "quantity":75221}, 
    {"price":1.60600, "quantity":53271} 
]} 

cảm ơn bạn cho lời khuyên nào!

PS: chỉ cần làm rõ: tất nhiên tôi có thể lặp qua, nhưng tôi nghĩ đó sẽ là một cách thanh lịch hơn ...

+0

thụt đầu dòng sẽ đẹp hơn – Ibu

+0

Tôi xin lỗi, không nhận ra ... – haemse

+0

Đây có phải là đối tượng hoặc chuỗi JSON không? – Jivings

Trả lời

9

Có phương pháp reduce của nguyên mẫu Array:

var arr = JSON.parse(objstring)["density"]; 
var max = arr.reduce(function(a, b) { 
    return Math.max(a, b.quantity); 
}, 0); 

Một giải pháp khác sẽ là một cái gì đó giống như

var max = Math.max.apply(null, arr.map(function(item){ 
    return item["quantity"]; 
})); 

Để biết thêm cách "tao nhã" có thư viện chức năng cung cấp các chức năng nhà máy getter và nhiều hơn nữa Các phương thức mảng. Giải pháp với thư viện như vậy có thể trông giống như

var max = arr.get("quantity").max(); 

sẽ thực hiện chính xác giống như trên, nhưng được thể hiện rõ hơn.

+0

cảm ơn bạn, đây là những gì tôi tìm kiếm! – haemse

+0

'reduce' là một giải pháp tuyệt vời, đơn giản và thanh lịch. Cảm ơn! –

2

Không có cách nào khác hơn là lặp qua, bởi vì bạn cần phải truy cập mọi trẻ em để xem thông số quantity có phải là giá thầu CPC Nói cách khác, độ phức tạp của vấn đề là O (n). Nếu trẻ em được lệnh bởi số lượng, nó sẽ là một câu chuyện khác nhau (tức là chỉ có được đứa con đầu hoặc cuối cùng trong danh sách.)

giống như sau ...

var json = '{"density":[{"price":1.22837,"quantity":48201},{"price":1.39837,"quantity":28201},{"price":1.40107,"quantity":127011},{"price":1.5174,"quantity":75221},{"price":1.60600,"quantity":53271}]}' 

var x = JSON.parse(json); 
var max = 0; 

x.density.forEach(function(item){ 
    if (item.quantity > max) max = item.quantity; 
}); 

Sau này chạy, tối đa là số lượng tối đa

lưu ý rằng bạn đã không cung cấp cho chúng tôi json chính xác, vì vậy tôi đã chỉnh sửa nó một chút.

Dưới đây là một ví dụ - bấm chạy và nhìn vào giao diện điều khiển của bạn http://jsfiddle.net/e3dQe/

+0

đề nghị tốt đẹp, thx – haemse

0

Làm thế nào về phương pháp max()? Nhưng trước tiên, bạn cần phải thu thập tất cả các giá trị trong một mảng ...

var obj = // your object 
var values = new Array(); 

for (key in obj) { 
    values.push(obj[key]) 
} 

var max = values.max() 

Không thanh lịch hơn, nhưng là một giải pháp khác.

Các vấn đề liên quan