hrhr99
@hrhr99

Как с помощью lodash сгруппировать и посчитать?

Имеем данные

items = {
                    0: {id:1,name:'foo'},
                    1: {id:2,name:'bar'},
                    2: {id:1,name:'foo'}
                };


Надо получить, сгруппированно и посчитано

result = {
                    0: {id:1,name:'foo', count:2},
                    1: {id:2,name:'bar', count:1}
                };


В lodash есть фунцкия _.countBy(items, 'name') она выведет {'foo': 2, 'bar':1}, а мне для полного счастья id не хватает.
  • Вопрос задан
  • 204 просмотра
Решения вопроса 1
@fiskus
Лучше использовать reduce

var items = [
  {id:1,name:'foo'},
  {id:2,name:'bar'},
  {id:1,name:'foo'}
];

var results = items.reduce(function(prev, item) {
  // если мы уже встречали такое name, то увеличиваем счетчик
  if (prev[item.name]) {
    prev[item.name].count++;
  } else {
    // если такого name не встречали, создаем счетчик
    prev[item.name] = {
      name: item.name,
      id: item.id,
      count: 1,
    };
  }
  return prev;
}, {});

console.log(items);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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