2013-04-15 18 views
5

Ho un array associativo che assomiglia a:Ritorno Valore massimo da un array associativo (Object)

var data = { 
    0: { 
     'Number_of_Something': 212 
    }, 
    1: { 
     'Number_of_Something': 65 
    }, 
    2: { 
     'Number_of_Something': 657 
    } 
} 

ho bisogno di estrarre il valore più alto nel campo Number_of_Something, però, perché si tratta di un campo all'interno di un oggetto di un oggetto, è un po 'più complicato del semplice seguire un metodo simile a qualcosa delineato here.

Il looping dell'oggetto e la memorizzazione del valore, quindi la sostituzione se il prossimo è più grande sembra l'opzione più semplice e ovvia.

Sto semplicemente chiedendo questa domanda nel caso in cui vi sia un modo più semplice (più intelligente) per raggiungere questo diverso dal metodo descritto sopra?

+1

Perché 'data' è un oggetto e non un array o almeno un oggetto di tipo array? –

+0

@FelixKling è un oggetto JSON passato da uno script PHP. Forzo un oggetto per altri scopi :) –

+0

Cosa c'è di sbagliato nel looping sui membri dell'oggetto? Sembra piuttosto semplice, mantenibile e molto compatibile con me. – RobG

risposta

11

semplice può essere soggettivo ... Un altro modo per ottenere ciò che si chiede è quello di ottenere una matrice dei valori utilizzando Object.keys e Array.prototype.map, e utilizzare l'altra soluzione con Math.max che si è collegato:

var data = { 
    0: { 
     'Number_of_Something': 212 
    }, 
    1: { 
     'Number_of_Something': 65 
    }, 
    2: { 
     'Number_of_Something': 657 
    } 
} 

var max = Math.max.apply(null, 
         Object.keys(data).map(function(e) { 
           return data[e]['Number_of_Something']; 
         })); 
+0

Questo è perfetto, grazie :-) –

+0

Avrà bisogno di shim per le funzionalità ES5 mancanti come * Object.keys * e * map *. – RobG

+0

nice solution man grazie! – nowiko

0

È possibile creare il proprio ciclo (per) e restituire il valore massimo in questo modo. Un'altra opzione è quella di utilizzare una libreria come Underscore.js per gestire questo per voi e mantenere il vostro codice leggibile.

+0

Ok, grazie. Quindi, in breve, senza un plug-in non esiste un modo semplice e breve, ho bisogno di scorrere come suggerito nella mia domanda? –

+0

Bene ... un plug-in eseguirà anche il looping all'interno dell'oggetto/array. Non c'è altra soluzione. –

+0

Pensato così :-). Ho accettato la soluzione di @ Zapshu in quanto fornisce esattamente quello che sto cercando. Grazie comunque –

Problemi correlati