2012-06-28 15 views
17

Przepraszam, jeśli wcześniej pytano, ale nie mogłem znaleźć dobrego przykładu tego, co próbuję osiągnąć. Może po prostu nie szukam właściwej rzeczy. Proszę mnie poprawić, jeśli gdzieś to ma wyjaśnienie. W każdym razie ...Json grupa danych JavaScript

Mam dane JSON skonstruowany tak jak ...

{"Result":[ 
    {"Level":"ML","TeamName":"Team 1","League":"League 1"}, 
    {"Level":"ML","TeamName":"Team 2","League":"League 2"}, 
    {"Level":"ML","TeamName":"Team 3","League":"League 3"}, 
    {"Level":"3A","TeamName":"Team 4","League":"League 1"}, 
    {"Level":"3A","TeamName":"Team 5","League":"League 2"}, 
    {"Level":"3A","TeamName":"Team 6","League":"League 3"}, 
    {"Level":"2A","TeamName":"Team 7","League":"League 1"}, 
    {"Level":"2A","TeamName":"Team 8","League":"League 2"}, 
    {"Level":"2A","TeamName":"Team 9","League":"League 3"}, 
]} 

chciałbym grupy lub restrukturyzacji go tak jak ...

{"Result":[ 
    {"ML":[ 
     {"TeamName":"Team 1","League":"League 1"}, 
     {"TeamName":"Team 2","League":"League 2"}, 
     {"TeamName":"Team 3","League":"League 3"} 
    ]}, 
    {"3A":[ 
     {"TeamName":"Team 4","League":"League 1"}, 
     {"TeamName":"Team 5","League":"League 2"}, 
     {"TeamName":"Team 6","League":"League 3"} 
    ]}, 
    {"2A":[ 
     {"TeamName":"Team 7","League":"League 1"}, 
     {"TeamName":"Team 8","League":"League 2"}, 
     {"TeamName":"Team 9","League":"League 3"} 
    ]} 
]} 

Jak by to osiągnąć to z Javascript/jQuery? Niestety nie mogę edytować tego, co serwer mi wysyła.

+8

[? Co próbowałeś] (http://whathaveyoutried.com/) To jest trywialny problem ... –

+0

Konwersja do JSON obiekt, skopiuj odpowiednie części do innego obiektu i przekonwertuj drugi obiekt na json. Możesz to zrobić. –

+0

@ JonathanM Ten ostatni krok może nie być nawet konieczny, ponieważ prawdopodobnie będą chcieli faktycznie coś zrobić z obiektem w pewnym momencie. –

Odpowiedz

26

Wystarczy śledzić to wszystko w obiekcie:

let groups = Object.create(null); 

data.forEach(item => { 
    if (!groups[item.Level]) { 
     groups[item.Level] = []; 
    } 

    groups[item.Level].push({ 
     TeamName: item.TeamName, 
     League: item.League 
    }); 
}); 

let result = 
    Object.entries(groups) 
     .map(([k, v]) => ({[k]: v})); 
+0

Czy twoja pętla for (i następna linia) może być uproszczona do 'for (item in data)'? –

+2

@TymothyAaron: Nie, pętla JavaScript 'for in' iteruje po kluczach, nie wartościach i nie powinieneś używać jej do iteracji po tablicach. Tak więc, wciąż czekamy na powszechne przyjęcie "dla każdego": D – Ryan

+0

Mówi, że używa jQuery, więc możesz użyć $ .each. – Julian