2012-06-28 23 views
17

Bu daha önce sorulmuşsa özür dilerim, ancak ne yapmaya çalıştığımı iyi bir örnek bulamadım. Belki de sadece doğru olanı aramadım. Bu bir yerde bir açıklama varsa lütfen beni düzeltin. Nasıl başarmak istiyorumJavascript json veri gruplandırması

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

... Neyse ...

JSON veri

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

Gruba istiyorum ... öylesine gibi yapılandırılmış olan veya yeniden yapılandırılması bunu şöyle Bu Javascript/jQuery ile? Ne yazık ki sunucunun bana ne gönderdiğini düzenleyemem.

+8

[? Eğer denedi Ne] (http://whathaveyoutried.com/) Bu önemsiz bir sorun ... –

+0

dönüştürme JSON için Bir nesneyi, ilgili parçaları başka bir nesneye kopyalayın ve 2. nesneyi json'a dönüştürün. Bunu yapabilirsin. –

+0

@JonathanM Bu son adımın gerekli olmayabileceği de varsayılabilir, çünkü bir noktada nesneyle gerçekten bir şeyler yapmak isteyecekler. –

cevap

26

Sadece bir nesne bunun hepsini takip:

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

Döngüsünüzü (ve sonraki satırı) 'için (veride öğe)' için basitleştirilebilir mi? –

+2

@TimothyAaron: Hayır, JavaScript'in 'in' için döngüsü, değerler üzerinde değil, anahtarların üzerinde yineler ve diziler üzerinde yinelemek için kullanmamalısınız. Yani, biz hala 'her biri için' yaygın kabulü bekliyoruz: D – Ryan

+0

JQuery kullandığını söylüyor, bu yüzden $. – Julian