问题描述
我从数据库中检索到以下数据
Content-Length
第一步是按部门名称对这些数据进行分组。
var members = [
{ "name" : "a","department_id" : 1,"department_name" : "aaa" },{ "name" : "b",{ "name" : "c",{ "name" : "d",{ "name" : "e",{ "name" : "f","department_id" : 2,"department_name" : "bbb" },{ "name" : "g","department_name" : "bbb" }
];
从这个状态开始,我想进一步将对象分成每三个对象。
理想情况下,我希望按照以下方式格式化数组
var groupedMembers = _.groupBy(members,"department_name");
↓
{
"aaa" : [
{ "name" : "a","department_name" : "aaa" }
],"bbb" : [
{ "name" : "f","department_name" : "bbb" }
]
}
我可以使用 Underscore.js 或 lodash.js 来解决这个问题吗? 如果不是太难,你可以使用其他库或纯 javascript 实现。
谢谢。
解决方法
你可以使用纯javascript来实现。
var groupedMembers = {
"aaa" : [
{ "name" : "a","department_id" : 1,"department_name" : "aaa" },{ "name" : "b",{ "name" : "c",{ "name" : "d",{ "name" : "e","department_name" : "aaa" }
],"bbb" : [
{ "name" : "f","department_id" : 2,"department_name" : "bbb" },{ "name" : "g","department_name" : "bbb" }
]
}
var splitByThree = {}
for (const key in groupedMembers) {
if (groupedMembers[key].length <= 3) {
splitByThree[key] = groupedMembers[key]
}
else {
for (var i=0,j=groupedMembers[key].length; i<j; i+=3) {
splitByThree[key + (i+3)/3] = groupedMembers[key].slice(i,i+3);
}
}
}
那么 splitByThree 就是您的预期结果。