2012-06-18 48 views
3

我有一個JSON數據,我需要做一些類似的組和我在這裏之前問這個問題,但我沒有得到任何滿意的答案,所以這次我想更深入地解釋。按JSON數據使用javascript/jquery

首先,任何人都可以解釋我的區別groupbyorderby之間在JavaScript中的SQL我們做所需的聚合函數,以便使用group by。但我不想要聚合函數。在這裏,我提供了一個我期待的JSON數據和輸出。

所有作者姓名應該是sortby字母數字順序。

JSON數據:

var myObject = { 
    "Apps": [ 
     { 
      "Name": "app1", 
      "id": "1", 
      "groups": [ 
       { 
        "id": "1", 
        "name": "test group 1", 
        "category": "clinical note", 
        "author": "RRP" 
       }, { 
        "id": "2", 
        "name": "test group 2", 
        "category": "clinical image", 
        "author": "LKP" 
       }, { 
        "id": "3", 
        "name": "test group 3", 
        "category": "clinical document", 
        "author": "RRP" 
       }, { 
        "id": "4", 
        "name": "test group 4", 
        "category": "clinical note", 
        "author": "John" 
       } 
      ] 
     } 
    ] 
} 

預期輸出:

John 
    4 testgroup4 clinicalnote 
RRP 
    1 testgroup1 clinicalnote 
    3 testgroup3 clinicaldocument 
LKP 
    2 testgroup2 clinicalimage  

任何想法/建議/方向/想到會是很大的幫助。

+1

沒有在JavaScript中沒有GROUPBY /排序依據,或你用一個庫?如果您在談論SQL,請提供您的查詢。 – Bergi

+0

感謝您的答覆。沒有sql.I只有JSON數據。我知道在javascript中沒有groupby/orderby。有什麼辦法可以實現這個目標。不,因爲我們開發了我們的內部語言,所以我不能使用圖書館。我知道圖書館並不重要,但由於公司政策,我不能使用第三方JavaScript庫。 – ravi

回答

1

在這種情況下,Javascript中沒有內置的「group by」或「order by」。你將不得不手動執行此操作。像這樣的東西可能會有所幫助:

var groups = myObject.Apps[0].groups; 
var authors = {}; 
var authorNames = []; 

for(var i = 0; i < groups.length; i++) { 
    var group = groups[i];  

    if(typeof authors[group.author] === "undefined") { 
     authors[group.author] = []; 
     authorNames.push(group.author); 
     authorNames.sort(); 
    } 

    authors[group.author].push({ 
     id: group.id, 
     name: group.name, 
     category: group.category 
    });  
} 

通常在關聯數組,你真的不關心鍵的順序和在迭代順序通常是無法得到保證。我在這裏做的是按排序順序維護一個單獨的數組名稱。然後,我可以迭代該數組,並使用這些值從關聯數組中獲取關聯的對象。

查看fiddle

+0

謝謝Vivin.I將首先進行排序,然後通過gropu傳遞整個對象,這樣我就可以得到確切的順序。我想你的解決方案會奏效。 – ravi

3

你可以做到這一點很容易與Underscore.js

_.chain(myObject.Apps[0].groups).sortBy("author").groupBy("author").value(); 

輸出一個JSON對象:

{ 
"John":[{"id":"4","name":"test group 4","category":"clinical note","author":"John"}], 
"LKP":[{"id":"2","name":"test group 2","category":"clinical image","author":"LKP"}], 
"RRP":[{"id":"1","name":"test group 1","category":"clinical note","author":"RRP"},{"id":"3","name":"test group 3","category":"clinical document","author":"RRP"}] 
} 
+0

如果我想讓新對象按照以下方式進行格式化,該怎麼辦?: {username:「Jhon」,userinfo:[{...}]}? –

+1

@Q_ro然後你可以後處理生成的對象,例如http://underscorejs.org/#pairs或'map',但這已經是一個不同的問題 – Andrejs