我遇到了一个问题。我从我的网络后端直接从我的数据库收到这种json文件。但是在结构的情况下,我希望它在客户端构造它以保持数据库访问和http请求低。此数组中的每个元素代表一个数据集,其中包含一个名为“sub”的子类别和一个名为“main”的主类别。因为我正在使用AngularJS,我想用ng-repeat在不同的元素中显示它们。因此,我想重新组织这个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 :(得分:0)
您请求的输出是不可能的,因为数组成员不是对象属性。没有"关键:价值"在数组中。 main1
是一个数组,它可以包含值,但不包含键(因此您无法生成main1: [ sub1:...
)
使用对象而不是数组,或者使用没有键的值数组
P.S。,你应该看看lodash或类似的图书馆,它将为你做大部分繁重的工作
答案 1 :(得分:0)
假设这是您要寻找的输出:
{
main1 : {
sub1 : [
{name: 'A', ...},
{name: 'B', ...}
],
sub2 : [ {name: 'C', ...} ]
},
main2 : {
sub3 : [ {name: 'D', ...} ]
}
}
您可以使用下划线和两个分组来解决此问题
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();