Отсортировать и вывести данные
Есть массив таких объектов:
{
"id": 1,
"update": 1613080786851,
"group": "group 1",
"subgroup": "subgroup 1",
"pInfo":
{
"pName": "Oliver_Patterson"
}
}
Поле update указывает на последнее обновление информации, если new Date().getTime() - account.update > 120, то это будет значит, что он не активен (это потребуется дальше).
account: объект аккаунта выше, idleTime: new Date().getTime() - account.update.
Нужно отсортировать и вывести в таком формате:
<ul class="list">
<li class="list__dropdown list__dropdown--hide">[Group: ${account.group}] Активно: ... (сколько активно в group)/... (сколько всего в group)</li>
<li class="list-items">
<ul class="list">
<li class="list__dropdown list__dropdown--hide">[Subgroup: ${account.subgroup}] Активно: ... (сколько активно в subgroup)/... (сколько всего в subgroup)</li>
<li class="list-items">
<ul class="list">
<li class="list__item">
<span ${idleTime > WAITS_IDLE ? 'class="className"' : ''}></span>
(${account.id}): ${account.pInfo.pName} ${idleTime > WAITS_IDLE ? `(Upd: ${idleTime} с. назад)` : ``}
</li>
... (новый li с информацией пользователя)
</ul>
</li>
... (новый li > ul с subgroup)
</ul>
</li>
</ul>
... (новый ul с group)
Я уже сижу часа два ломаю голову, как это лучше сделать. Проблема скорее в подсчете данных и выводом. Так же желательно, чтобы в дальнейшем можно было вывести отдельно всех "юзеров" subgroup и сортировать.
Проект сделан с использованием express (сервер), ejs (шаблоны, но толком я и не нашел применения).
Я очень надеюсь на вашу помощь и направление, помогу любой дополнительной информацией.
Ответы (1 шт):
const getActiveUserLengthInGroup = (arr, group_name = null, subgroup_name = null) => {
const isActive = (last_update) => {
return (new Date().getTime() - last_update) > 120
}
let users_in_group = [...arr].filter((user) => {
return group_name ? user.group === group_name : user.subgroup === subgroup_name;
})
let active_users_in_group = [...users_in_group].filter((user) => {
return isActive(user.update)
})
return [users_in_group.length, active_users_in_group.length]
}
const [group1_count, group1_active] = getActiveUserLengthInGroup(array, 'group 1')
Вот есть функция getActiveUserLengthInGroup, принимает массив всех пользователей, имя группы, имя субгруппы. Возвращает массив из двух элементов: первый элемент это количество юзеров из заданной групы, второй элемент количество активных юзеров из данной группы.
Если нужно и субгруппы получить данные, мы передаем вторым параметром null, а третьим название субгруппы.
const [subgroup3_group_count, subgroup3_group_active] = getActiveUserLengthInGroup(array, null, 'subgroup 3')
И потом уже выводим в шаблон:
<li class="list__dropdown list__dropdown--hide">[SubGroup: ${account.subgroup}] Активно: ${subgroup3_group_active} ${subgroup3_group_count}</li>