问题是我有一个没有父母的json。因此,我需要手动创建分组。

这是我的json:

"data":[
    {"AREA":"A/M COMMON","DIVISION":"B","LOCATION":"FBC"},
    {"AREA":"A/M MAINTENANCE","DIVISION":"B","LOCATION":"FBC"},
    {"AREA":"A/M PRODUCTION LCD DIVISION","DIV":"B","LOCATION":"SONY"},
    {"AREA":"AM VIZIO MAINTENANCE","DIVISION":"B","LOCATION":"FBC"},
    {"AREA":"AM VIZIO PRODUCTION","DIVISION":"B","LOCATION":"VIZIO"},
    {"AREA":"BUSINESS PLANNING","DIVISION":"B","LOCATION":"FBC"},
    {"AREA":"COMARKET F/A PRODUCTION DIRECT","DIVISION":"B","LOCATION":"FBC"},
    {"AREA":"CONTROLLERS","DIVISION":"B","LOCATION":"FBC"},
    ]


我想将数据分为3个数组,首先按LOCATION,然后按DIVISION和最后一个AREA

我尝试使用underscore.js

    var groupedData = _.groupBy(data, function (d) { return d.LOCATION});


因此,我想按层次结构分组,但是此方法仅返回1个装配,而我需要两个。

有办法吗?我迷路了

https://jsfiddle.net/jaelsvd/dwc5mdyL/

最佳答案

我认为这应该做您想要的:

let result = _.chain(data)
    .groupBy('AREA')
    .mapObject(area => _.groupBy(area, 'DIVISION'))
    .mapObject(area => _.mapObject(area, div => _.groupBy(div, 'LOCATION')))
    .value();


首先,它按AREA分组以提供如下对象:

{
    'AM/COMMON': [ /* AM/COMMON objects */ ],
    'A/M MAINTENANCE': [ /* A/M MAINTENANCE */ ],
    etc
}


然后,它跨每个对象映射以按DIVISION分组。

最后,它映射每个区域内的每个划分对象,以按位置分组。



	let data = [
    {"AREA":"A/M COMMON","DIVISION":"B","LOCATION":"FBC"},
    {"AREA":"A/M MAINTENANCE","DIVISION":"B","LOCATION":"FBC"},
    {"AREA":"A/M PRODUCTION LCD DIVISION","DIV":"B","LOCATION":"SONY"},
    {"AREA":"AM VIZIO MAINTENANCE","DIVISION":"A","LOCATION":"FBC"},
    {"AREA":"AM VIZIO MAINTENANCE","DIVISION":"A","LOCATION":"FBC"},
    {"AREA":"AM VIZIO MAINTENANCE","DIVISION":"B","LOCATION":"FBC"},
    {"AREA":"AM VIZIO MAINTENANCE","DIVISION":"B","LOCATION":"FBX"},
    {"AREA":"AM VIZIO MAINTENANCE","DIVISION":"B","LOCATION":"FBX"},
    {"AREA":"AM VIZIO PRODUCTION","DIVISION":"B","LOCATION":"VIZIO"},
    {"AREA":"BUSINESS PLANNING","DIVISION":"B","LOCATION":"FBC"},
    {"AREA":"COMARKET F/A PRODUCTION DIRECT","DIVISION":"B","LOCATION":"FBC"},
    {"AREA":"CONTROLLERS","DIVISION":"B","LOCATION":"FBC"},
    ];

    let result = _.chain(data)
    	.groupBy('AREA')
    	.mapObject(area => _.groupBy(area, 'DIVISION'))
    	.mapObject(area => _.mapObject(area, div => _.groupBy(div, 'LOCATION')))
    	.value();

      console.log(result)

<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

09-17 23:28