2016-10-17 35 views
-2

我有結構化的,像這樣(摘自JSON格式)約會列表:我該如何重構JS對象?

var oData = { 
    "data": { 
     "d": { 
      "results": [ 
       { 
        "Room": "403", 
        "Title": "MaLyssa Scott Meeting", 
        "Category": "Meeting", 
        "EventDate": "2016-10-31T19:30:00Z", 
        "EndDate": "2016-10-31T21:00:00Z" 
       }, 
       { 
        "Room": "403", 
        "Title": "OF Upgrade Meeting", 
        "Category": "Meeting", 
        "EventDate": "2016-10-13T17:00:00Z", 
        "EndDate": "2016-10-13T18:00:00Z" 
       }, 
       { 
        "Room": "428", 
        "Title": "IPAC DTID CRM", 
        "Category": "Meeting", 
        "EventDate": "2016-10-12T17:30:00Z", 
        "EndDate": "2016-10-12T18:30:00Z" 
       }, 
       { 
        "Room": "434", 
        "Title": "BPR-12-001 Updates", 
        "Category": "Meeting", 
        "EventDate": "2016-10-10T15:00:00Z", 
        "EndDate": "2016-10-10T15:30:00Z" 
       }, 
       { 
        "Room": "436", 
        "Title": "OF Update Meeting", 
        "Category": "Work hours", 
        "EventDate": "2016-10-12T17:00:00Z", 
        "EndDate": "2016-10-12T18:00:00Z" 
       }, 
       { 
        "Room": "454", 
        "Title": "Real Property Meeting", 
        "Category": "Meeting", 
        "EventDate": "2016-10-12T20:00:00Z", 
        "EndDate": "2016-10-12T21:00:00Z" 
       } 
      ] 
     } 
    } 
}  

我需要按房間號的結果數組,因此,例如,403室有2個孩子是一個兄弟姐妹另一個而不是兩個單獨的對象。

我想我可以用'if'語句做這件事,然後將對象推入每個房間的數組中,最佳做法是什麼?

+1

第一,忘記它是 「JSON」 的想法。你正在重組的是一個對象。其次,這不是一個普遍的情況(每一次重組A到B的情況都不一樣),所以不會有「最佳做法」。只要做到這一點,那麼當你不能進一步尋找在這個特定問題上的蠢事時,你會回來。 –

+0

對,感謝編輯 –

+1

你可以向服務器請求一個不同的對象嗎?理想情況下,您的服務器端數據庫查詢將返回接近您的最終狀態的內容。現在,您正在傾銷數據庫然後對數據庫進行分類,當您可以從數據庫中以分類形式索要數據庫時,就可以開始分類。 –

回答

1

可以使用減少 -

var newData = oData.data.d.results.reduce(function(prev,curr){ 
    if (!prev[curr.Room]) { // if room not already in the object add it. 
     prev[curr.Room] = []; 
    } 
    prev[curr.Room].push(curr); 
    return prev; 
}, {}); // init with an empty object 

console.log(newData);