Как я могу разделить сгруппированный массив-объект по длине?

У меня есть следующие данные, полученные из базы данных

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.

Спасибо.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
0
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете просто использовать чистый 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 — ваш ожидаемый результат.

Другие вопросы по теме