2010-04-12 21 views
8

Esto debería ser fácil. No puedo entenderlo.Obtenga el mayor valor del objeto Json con Javascript

Cómo obtengo el mayor valor de esta pieza de JSON con javascript.

{"data":{"one":21,"two":35,"three":24,"four":2,"five":18},"meta":{"title":"Happy with the service"}} 

La clave y el valor que necesito es:

"two":35 

ya que es el más alto

gracias

Respuesta

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

Usando hasOwnProperty() es un buen punto. –

+0

@Insin ¿Qué significa hasOwnProperty? ¿Por qué usaste eval? – systempuntoout

+2

@systempuntoout hasOwnProperty protege contra las bibliotecas maliciosas agregando cosas a Object.prototype, ya que no conocemos el contexto completo en el que se ejecutará este código. Utilicé eval() ya que la pregunta fue hecha con respecto a JSON - JSON es un formato de texto, por lo que siempre toma la forma de cadenas que cumplen con la especificación en json.org. Podría ser que el asker de la pregunta confundiera JSON con Object Literal Notation (hay muchos, muchos tutoriales/artículos engañosos por ahí que no ayudan con eso), y por eso me empeñé en usar un texto JSON. –

1

Ésta es mi función para la mayor clave

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 por ser la única solución que maneja correctamente los valores negativos correctamente. –

8

Si tiene underscore:

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

¿Cómo funciona esto:

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

También se pueden recorrer el objeto después de analizar sintácticamente 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); 
Cuestiones relacionadas