У меня есть следующие данные, полученные из базы данных
var members = [
{ "name" : "a", "department_id" : 1, "department_name" : "aaa" },
{ "name" : "b", "department_id" : 1, "department_name" : "aaa" },
{ "name" : "c", "department_id" : 1, "department_name" : "aaa" },
{ "name" : "d", "department_id" : 1, "department_name" : "aaa" },
{ "name" : "e", "department_id" : 1, "department_name" : "aaa" },
{ "name" : "f", "department_id" : 2, "department_name" : "bbb" },
{ "name" : "g", "department_id" : 2, "department_name" : "bbb" }
];
Первый шаг — сгруппировать эти данные по названию отдела.
var groupedMembers = _.groupBy(members, "department_name");
↓
{
"aaa" : [
{ "name" : "a", "department_id" : 1, "department_name" : "aaa" },
{ "name" : "b", "department_id" : 1, "department_name" : "aaa" },
{ "name" : "c", "department_id" : 1, "department_name" : "aaa" },
{ "name" : "d", "department_id" : 1, "department_name" : "aaa" },
{ "name" : "e", "department_id" : 1, "department_name" : "aaa" }
],
"bbb" : [
{ "name" : "f", "department_id" : 2, "department_name" : "bbb" },
{ "name" : "g", "department_id" : 2, "department_name" : "bbb" }
]
}
Из этого состояния я хочу дополнительно разделить объект на каждые три объекта.
В идеале я хотел бы, чтобы массив был отформатирован следующим образом
var expected = {
"aaa1" : [
{ "name" : "a", "department_id" : 1, "department_name" : "aaa" },
{ "name" : "b", "department_id" : 1, "department_name" : "aaa" },
{ "name" : "c", "department_id" : 1, "department_name" : "aaa" }
],
"aaa2" : [
{ "name" : "d", "department_id" : 1, "department_name" : "aaa" },
{ "name" : "e", "department_id" : 1, "department_name" : "aaa" }
],
"bbb" : [
{ "name" : "f", "department_id" : 2, "department_name" : "bbb" },
{ "name" : "g", "department_id" : 2, "department_name" : "bbb" }
]
};
Могу ли я решить эту проблему с помощью Underscore.js или lodash.js? Если это не слишком сложно, вы можете использовать другие библиотеки или реализации чистого javascript.
Спасибо.
Вы можете просто использовать чистый javascript для реализации.
var groupedMembers = {
"aaa" : [
{ "name" : "a", "department_id" : 1, "department_name" : "aaa" },
{ "name" : "b", "department_id" : 1, "department_name" : "aaa" },
{ "name" : "c", "department_id" : 1, "department_name" : "aaa" },
{ "name" : "d", "department_id" : 1, "department_name" : "aaa" },
{ "name" : "e", "department_id" : 1, "department_name" : "aaa" }
],
"bbb" : [
{ "name" : "f", "department_id" : 2, "department_name" : "bbb" },
{ "name" : "g", "department_id" : 2, "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 — ваш ожидаемый результат.