2015-07-19 89 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();