2012-06-28 45 views
17

Xin lỗi nếu điều này đã được hỏi trước đó, nhưng tôi không thể tìm thấy một ví dụ điển hình về những gì tôi đang cố gắng hoàn thành. Có lẽ tôi không tìm kiếm điều đúng. Vui lòng sửa tôi nếu có giải thích về điều này ở đâu đó. Dù sao ...Nhóm dữ liệu json Javascript

Tôi đã dữ liệu JSON cấu trúc như vậy ...

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

Tôi muốn nhóm, hoặc cơ cấu lại nó như vậy ...

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

Làm thế nào tôi có thể hoàn thành điều này với Javascript/jQuery? Rất tiếc, tôi không thể chỉnh sửa những gì máy chủ đang gửi cho tôi.

+8

[? Bạn đã cố gắng gì] (http://whathaveyoutried.com/) Đây là một vấn đề tầm thường ... –

+0

Chuyển đổi JSON để một đối tượng, sao chép các phần liên quan đến đối tượng khác, và chuyển đổi đối tượng thứ 2 thành json. Bạn có thể làm được. –

+0

@JonathanM Bước cuối cùng có thể thậm chí không cần thiết, vì giả định rằng họ sẽ muốn thực sự làm điều gì đó với đối tượng tại một số điểm. –

Trả lời

26

Chỉ cần theo dõi tất cả trong một đối tượng:

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

Vòng lặp for (và dòng kế tiếp) của bạn có thể được đơn giản hóa thành 'for (item in data)' không? –

+2

@TimothyAaron: Không, vòng lặp for for' của JavaScript lặp qua các khóa, không phải các giá trị và bạn không nên sử dụng nó để lặp qua các mảng. Vì vậy, chúng tôi vẫn đang chờ đợi sự chấp nhận rộng rãi của 'cho mỗi': D – Ryan

+0

Ông nói rằng ông đang sử dụng jQuery, vì vậy bạn có thể sử dụng $ .each. – Julian