2012-06-28 11 views
17

Lo siento si esto se ha preguntado antes, pero no he podido encontrar un buen ejemplo de lo que estoy tratando de lograr. Quizás no estoy buscando lo correcto. Por favor corrígeme si hay una explicación de esto en alguna parte. De todos modos ...agrupación de datos de Javascript json

He datos JSON estructurado como tal ...

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

me gustaría grupo o reestructurarlo como tal ...

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

¿Cómo voy a lograr esto con Javascript/jQuery? Desafortunadamente no puedo editar lo que el servidor me está enviando.

+8

[? ¿Qué has intentado] (http://whathaveyoutried.com/) Este es un problema trivial ... –

+0

Convertir el JSON para un objeto, copie las partes relevantes a otro objeto y convierta el segundo objeto a json. Puedes hacerlo. –

+0

@JonathanM Ese último paso puede que ni siquiera sea necesario, ya que supuestamente van a querer hacer algo con el objeto en algún momento. –

Respuesta

26

Sólo un seguimiento de todo en un objeto:

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

¿Puede su bucle for (y la siguiente línea) simplificarse en 'for (item in data)'? –

+2

@TimothyAaron: No, el bucle 'for in' de JavaScript itera sobre las claves, no sobre los valores, y no debe usarlo para iterar sobre las matrices. Por lo tanto, todavía estamos esperando la adopción generalizada de 'para cada uno': D – Ryan

+0

Dice que está usando jQuery, por lo que podría usar $ .each. – Julian

Cuestiones relacionadas