2013-04-15 13 views
5

Mam tablicę asocjacyjną, która wygląda tak:Powrót Maksymalna wartość z tablicy asocjacyjnej (Object)

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

muszę wydobyć najwyższą wartość w polu Number_of_Something jednak, ponieważ jest to dziedzina w ramach obiekt obiektu, jest nieco bardziej skomplikowany niż po prostu podążanie podobną metodą do czegoś zarysowanego here.

Zapętlenie obiektu i zapisanie wartości, a następnie jej zastąpienie, jeśli następny jest większy, wydaje się być najprostszą i najbardziej oczywistą opcją.

Po prostu zadaję to pytanie w przypadku, gdy istnieje prostszy (mądrzejszy) sposób osiągnięcia tego innego niż metoda opisana powyżej?

+1

Dlaczego 'dane' jest obiektem, a nie tablicą lub co najmniej obiektem podobnym do tablicy? –

+0

@FelixKling to obiekt JSON przekazany ze skryptu PHP. Zmuszam obiekt do innych celów :) –

+0

Co jest nie tak z zapętlaniem się elementów obiektu? Wydaje się to dość proste, możliwe do utrzymania i bardzo zgodne ze mną. – RobG

Odpowiedz

11

prostsze może być subiektywna ... Innym sposobem, aby osiągnąć to, co pytasz jest dostać tablicę wartości za pomocą Object.keys i Array.prototype.map i użyć innego rozwiązania z Math.max które powiązane:

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

To jest idealne, dziękuję :-) –

+0

Potrzebne będą podkładki pod brakujące funkcje ES5, takie jak * Object.keys * i * map *. – RobG

+0

ładne rozwiązanie człowiek dzięki! – nowiko

0

Można utworzyć własną pętlę (for) i zwrócić maksymalną wartość w ten sposób. Inną opcją jest użycie biblioteki takiej jak Underscore.js, aby poradzić sobie z tym i zachować czytelność kodu.

+0

OK, dziękuję. Krótko mówiąc, bez wtyczki nie ma łatwej drogi, muszę przejść przez to, co zasugerowałem w moim pytaniu? –

+0

No cóż ... wtyczka będzie również wewnętrznie przechodzić przez obiekt/tablicę. Nie ma innego rozwiązania. –

+0

Tak myślałem :-). Zaakceptowałem rozwiązanie @ Zapshu, ponieważ zapewnia dokładnie to, czego szukam. Mimo to dziękuję –

Powiązane problemy