我可以使用 underscore.js 进行多个分组吗?
Can I do multiple group by's with underscore.js?
问题是我有一个 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,最后是 面积
我尝试使用 underscore.js
var groupedData = _.groupBy(data, function (d) { return d.LOCATION});
所以我想按层次分组,但是这个方法只有returns 1个聚合,我需要两个。
我有办法做到这一点吗?我迷路了。
我认为这应该可以满足您的要求:
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' 分组。
最后它映射到每个区域内的每个分区对象以按 LOCATION 分组。
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>
Underscore 有一个更简单的方法来获得这个 运行
@Jael Saavedra 数据数组中的第 3 行有错误 Div 应该是 DIVISION
已使用此处的解决方案更新您的 jsfiddle https://jsfiddle.net/dwc5mdyL/3/
var groupedData = _.groupBy(data, function(d) {
return d.LOCATION + "-" + d.DIVISION+ "-" + d.AREA;
});
原始来源
coderwall
google cache
问题是我有一个 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,最后是 面积
我尝试使用 underscore.js
var groupedData = _.groupBy(data, function (d) { return d.LOCATION});
所以我想按层次分组,但是这个方法只有returns 1个聚合,我需要两个。
我有办法做到这一点吗?我迷路了。
我认为这应该可以满足您的要求:
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' 分组。
最后它映射到每个区域内的每个分区对象以按 LOCATION 分组。
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>
Underscore 有一个更简单的方法来获得这个 运行 @Jael Saavedra 数据数组中的第 3 行有错误 Div 应该是 DIVISION
已使用此处的解决方案更新您的 jsfiddle https://jsfiddle.net/dwc5mdyL/3/
var groupedData = _.groupBy(data, function(d) {
return d.LOCATION + "-" + d.DIVISION+ "-" + d.AREA;
});
原始来源 coderwall google cache