@stimul777

Как сгруппировать объекты по значениям одного из их свойств?

Есть массив:

[{type: 'type-1', value: 5},
 {type: 'type-1', value: 7}, 
{type: 'type-2', value: 3}, 
{type: 'type-3', value: 5}, 
{type: 'type-4', value: 5}, 
{type: 'type-1', value: 88}]

Надо получить с него новый массив:

[
{ type: 'type-1',
  data: [
   {type: 'type-1', value: 5},
   {type: 'type-1', value: 7},
   {type: 'type-1', value: 88},
  ]
},
{
type: 'type-2',
  data: [
    {type: 'type-2', value: 3}, 
  ]
},
{
type: 'type-3',
  data: [
   {type: 'type-3', value: 5}, 
  ]
}
// и т.д.
]
  • Вопрос задан
  • 110 просмотров
Решения вопроса 2
WblCHA
@WblCHA
Object.values(arr.reduce((acc, v) => {
    acc[v.type] ??= {
      type: v.type,
      data: [],
    };
    acc[v.type].data.push(v);
    return acc;
  }, {}))
Ответ написан
Комментировать
TRen208
@TRen208
const array = [
    { type: 'type-1', value: 5 },
    { type: 'type-1', value: 7 },
    { type: 'type-2', value: 3 },
    { type: 'type-3', value: 5 },
    { type: 'type-4', value: 5 },
    { type: 'type-1', value: 88 }
];
const result = [];

for (let o of array) {
    let obj = result.find(_o => _o.type == o.type);
    if (!obj) obj = { type: o.type, data: [] }, result.push(obj);
    obj.data.push({ type: o.type, value: o.value });
}

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

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

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