Vladeo
@Vladeo
Chudo

Как посчитать количество элементов в объекте по определенному условию?

Есть объект:

{
  developer_name0: 'Egor',
  application_system0: 'Android',
  developer_name1: 'Sasha',
  application_system1: 'Android',
  developer_name2: 'Egor',
  application_system2: 'IOS',
  developer_name3: 'Sasha',
  application_system3: 'IOS',
  developer_name4: 'Egor',
  application_system4: 'Android',
  developer_name5: 'Sasha',
  application_system5: 'IOS',
  developer_name6: 'Artur',
  application_system6: 'Android',
}

Ожидаемый результат:

Egor: Android - 2, IOS -1
Sasha: Android - 1, IOS - 2
Artur: Android - 1, IOS - 0

Имена могут быть разными, операционки нет.
  • Вопрос задан
  • 370 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Формат данных конечно просто ублюдочный.

Сперва соберём нормальный массив объектов вместо этого позорища:

const arr = Object
  .entries(obj)
  .reduce((acc, [ k, v ]) => (
    k = k.match(/([a-z]+)(\d+$)/),
    (acc[k[2]] ??= {})[k[1]] = v,
    acc
  ), []);

Затем посчитаем, у кого чего сколько:

const os = Object.fromEntries(arr.map(n => [ n.system, 0 ]));
const count = arr.reduce((acc, n) => ((acc[n.name] ??= { ...os })[n.system]++, acc), {});

Ну и выведем результаты:

console.log(Object
  .entries(count)
  .map(n => `${n[0]}: ${Object.entries(n[1]).map(m => m.join(' - ')).join(', ')}`)
  .join('\n')
);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы