@dmitry2000

Как преобразовать массив в другой массив?

Есть массив:
const arr = [
                {
                    id: 1,
                    group: 1,
                    name: 'Ivan'
                },
                {
                    id: 2,
                    group: 1,
                    name: 'Ivan'
                },
                {
                    id: 3,
                    group: 1,
                    name: 'Ivan'
                },
                {
                    id: 4,
                    group: 2,
                    name: 'Ivan'
                }
            ];

Как преобразовать в такой?
const output = [
                {
                    people: [
                        {
                            id: 1,
                            group: 1,
                            name: 'Ivan'
                        },
                        {
                            id: 2,
                            group: 1,
                            name: 'Ivan'
                        },
                        {
                            id: 3,
                            group: 1,
                            name: 'Ivan'
                        }
                    ],
                    groupId: 1
                },
                {
                    people: [
                        {
                            id: 4,
                            group: 2,
                            name: 'Ivan'
                        }
                    ],
                    groupId: 2
                }
            ];
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
kavi4
@kavi4
Web developer
const arr = [
                {
                    id: 1,
                    group: 1,
                    name: 'Ivan'
                },
                {
                    id: 2,
                    group: 1,
                    name: 'Ivan'
                },
                {
                    id: 3,
                    group: 1,
                    name: 'Ivan'
                },
                {
                    id: 4,
                    group: 2,
                    name: 'Ivan'
                }
            ];

const map = new Map();

arr.forEach((item)=>{

    let group = map.get(item.group) || {groupId:item.group, people:[]}
    group.people.push(item)
    map.set(item.group, group)

});
 
const output = Array.from(map.values());

поиск по Map работает за константное время(не зависящее от количества элементов). Можно также использовать обьект.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы