Используйте _.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>