Сгруппируйте класс и посчитайте пользователей, используя lodash / Javascript - PullRequest
0 голосов
/ 21 марта 2019

Получил список массивов, в котором есть список классов и пользователей, которые посетили;Нужен вывод, который отображает посещение пользователя, группируя классы и подсчитывая общее количество пользователей;

var arrList = [
  { class: 'one', user: 'user1' },
  { class: 'two', user: 'user1' },
  { class: 'two', user: 'user2' },
  { class: 'one', user: 'user3' },
  { class: 'two', user: 'user3' },
  { class: 'three', user: 'user1' },
  { class: 'four', user: 'user1' }
];

// output
[
  { class: 'one', user: [ 'user1', 'user2', 'user3' ], count: 3 },
  { class: 'two', user: [ 'user1', 'user3' ], count: 2 },
  { class: 'three', user: [ 'user1' ], count: 1 },
  { class: 'four', user: [ 'user1' ], count: 1 } 
];

1 Ответ

2 голосов
/ 21 марта 2019

Используйте _.groupBy(), чтобы собрать объект с помощью клавиши class, а затем сопоставить с требуемой формой.

Решение с цепочкой (требуется полный импорт пакета lodash):

const arrList = [{"class":"one","user":"user1"},{"class":"two","user":"user1"},{"class":"two","user":"user2"},{"class":"one","user":"user3"},{"class":"two","user":"user3"},{"class":"three","user":"user1"},{"class":"four","user":"user1"}];

const result = _(arrList)
  .groupBy('class')
  .map((group, key) => ({
    class: key,
    user: _.map(group, 'user'),
    count: group.length
  }))
  .value();
  
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

Решение с использованием _.flow() (можно импортировать только то, что вам нужно из пакета lodash):

const { flow, partialRight: pr, groupBy, map } = _; // replace with imports in your project

const fn = flow(
  pr(groupBy, 'class'),
  pr(map, (group, key) => ({
    class: key,
    user: map(group, 'user'),
    count: group.length
  }))
);
  
const arrList = [{"class":"one","user":"user1"},{"class":"two","user":"user1"},{"class":"two","user":"user2"},{"class":"one","user":"user3"},{"class":"two","user":"user3"},{"class":"three","user":"user1"},{"class":"four","user":"user1"}];

const result = fn(arrList);
  
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
...