2015-07-19 46 views
0

我遇到了一個問題。我直接從我的數據庫中從我的web後端接收這種json文件。但在結構的情況下,我希望它在客戶端的結構,以保持數據庫訪問和http請求低。此數組中的每個元素表示一個數據集,它具有一個名爲「sub」的子類別和名爲「main」的主類別。因爲我正在使用AngularJS,我想用ng-repeat在不同的元素中顯示它們。因此,我想重新組織這個JSON的結構,所以我得到了一個具有數組的子類別的主類別數組(也是一個數組)。在Javascript中重組我的JSON對象的屬性

[ 
    {name: 'A', ..., sub: 'sub1', main: 'main1'}, 
    {name: 'B', ..., sub: 'sub1', main: 'main1'}, 
    {name: 'C', ..., sub: 'sub2', main: 'main1'}, 
    {name: 'D', ..., sub: 'sub3', main: 'main2'}, 
    .... 
] 

應重組爲以下內容:

[ 
    main1 : [ 
       sub1 : [  
        {name: 'A', ...}, 
        {name: 'B', ...} 
       ], 
       sub2 : [ 
        {name: 'C', ...} 
       ] 
      ], 
    main2 : [ 
       sub3 : [ 
        {name: 'D', ...} 

       ] 
      ] 
] 

我已經設定某種形式的解決方案有許多循環遍歷數組,記住所有的子類別和主要分類等,但主要的問題是通過創建這些稱爲main1和main2的數組(然後是sub1和sub2,sub3)。問題是我無法找到一個命名這些數組的命令,因爲它們是基於我的「輸入數據」中的字符串值。

... 
var subValue = .... (get name of sub category) 
var result.push({subValue: []}); 
... 

這是行不通的。所有的數組元素被稱爲subValue,而不是我想要設置的名稱。

我希望我能得到某種相關的信息。

回答

0

您請求的輸出是不可能的,因爲數組成員不是對象屬性。數組中沒有「key:value」。 main1是一個數組,並且它可以包含值,但不能鍵(因此不能生成main1: [ sub1:...

既可以使用一個對象,而不是陣列中,或具有的值的無按鍵陣列

PS,你應該看看lodash或類似的庫,將做最繁重的工作適合你

+0

很明顯,OP有點偏離軌道,但這不是'不可能的'......它只是需要一點點修改 – charlietfl

0

假設這是你要找的輸出:

{ 
    main1 : { 
     sub1 : [  
       {name: 'A', ...}, 
       {name: 'B', ...} 
      ], 
     sub2 : [ {name: 'C', ...} ] 
    }, 
    main2 : { 
     sub3 : [ {name: 'D', ...} ] 
    } 
} 

您可以使用此解決UND erscore與兩組by

var arr = [ 
    {name: 'A', sub: 'sub1', main: 'main1'}, 
    {name: 'B', sub: 'sub1', main: 'main1'}, 
    {name: 'C', sub: 'sub2', main: 'main1'}, 
    {name: 'D', sub: 'sub3', main: 'main2'} 
]; 

var grouped = _.chain(arr) 
      .groupBy('main') 
      .mapObject(function(item) { return _.groupBy(item, 'sub');}) 
      .value();