2010-04-12 19 views

Odpowiedz

9
var jsonText = '{"data":{"one":21,"two":35,"three":24,"four":2,"five":18},"meta":{"title":"Happy with the service"}}' 
var data = JSON.parse(jsonText).data 
var maxProp = null 
var maxValue = -1 
for (var prop in data) { 
    if (data.hasOwnProperty(prop)) { 
    var value = data[prop] 
    if (value > maxValue) { 
     maxProp = prop 
     maxValue = value 
    } 
    } 
} 
+0

Korzystanie z hasOwnProperty() jest dobrym punktem. –

+0

@Insin Co oznacza hasOwnProperty? Dlaczego użyłeś eval? – systempuntoout

+2

@systempuntoout hasOwnProperty chroni przed niegrzecznymi bibliotekami, dodając rzeczy do Object.prototype, ponieważ nie znamy pełnego kontekstu, w którym ten kod zostanie wykonany. Użyłem eval() jako pytania zadawanego w odniesieniu do JSON - JSON jest formatem tekstowym, więc zawsze przyjmuje formę ciągów zgodnych ze specyfikacją na json.org. Możliwe, że pytający pomieszał JSON z Object Literal Notation (istnieje wiele, wiele mylących samouczków/artykułów, które nie pomagają w tym), dlatego też postanowiłem użyć tekstu JSON. –

1

To jest moja funkcja największy klucz

function maxKey(a) { 
    var max, k; // don't set max=0, because keys may have values < 0 
    for (var key in a) { if (a.hasOwnProperty(key)) { max = parseInt(key); break; }} //get any key 
    for (var key in a) { if (a.hasOwnProperty(key)) { if((k = parseInt(key)) > max) max = k; }} 
    return max; 
} 
+0

+1 za bycie jedynym rozwiązaniem, które właściwie obsługuje poprawnie wartości ujemne. –

8

Jeśli masz underscore:

var max_key = _.invert(data)[_.max(data)]; 

Jak to działa:

var data = {one:21, two:35, three:24, four:2, five:18}; 
var inverted = _.invert(data); // {21:'one', 35:'two', 24:'three', 2:'four', 18:'five'}; 
var max = _.max(data); // 35 
var max_key = inverted[max]; // {21:'one', 35:'two', 24:'three', 2:'four', 18:'five'}[35] => 'two' 
0

Można również iteracyjne obiektu po analizowania JSON.

var arr = jQuery.parseJSON('{"one":21,"two":35,"three":24,"four":2,"five":18}'); 

var maxValue = 0; 

for (key in arr) 
{ 
    if (arr[key] > maxValue) 
    { 
      maxValue = arr[key]; 
    } 
} 

console.log(maxValue); 
Powiązane problemy