2012-06-28 12 views
17

Sorry, wenn dies schon einmal gefragt wurde, aber ich konnte kein gutes Beispiel dafür finden, was ich zu erreichen versuche. Vielleicht suche ich einfach nicht das Richtige. Bitte korrigieren Sie mich, wenn es irgendwo eine Erklärung dafür gibt. Wie auch immer ...Javascript JSON Daten Gruppierung

Ich habe JSON-Daten wie so strukturiert ...

{"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"}, 
]} 

ich zu einer Gruppe haben möchte, oder Umstrukturierung es wie so ...

{"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"} 
    ]} 
]} 

Wie würde ich erreichen das mit Javascript/jQuery? Leider kann ich nicht bearbeiten, was der Server mir schickt.

+8

[? Was haben Sie versucht] (http://whathaveyoutried.com/) Dies ist ein triviales Problem ... –

+0

Konvertieren der JSON ein Objekt, kopiere relevante Teile in ein anderes Objekt und konvertiere das 2. Objekt in json. Du kannst es schaffen. –

+0

@ JonathanM Der letzte Schritt ist vielleicht gar nicht nötig, da sie vermutlich irgendwann etwas mit dem Objekt machen wollen. –

Antwort

26

Halten Sie einfach den Überblick über all dem in einem Objekt:

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

Kann die for-Schleife (und die nächste Zeile) in 'for (item in data)' vereinfacht werden? –

+2

@TimothyAaron: Nein, die 'in'-Schleife von JavaScript iteriert über Schlüssel, nicht über Werte, und Sie sollten sie nicht verwenden, um über Arrays zu iterieren. Also, wir warten immer noch auf die weit verbreitete Annahme von 'für jeden': D – Ryan

+0

Er sagt, er benutzt jQuery, also könnten Sie $ .each verwenden. – Julian