Вы можете сделать это с помощью нескольких итераций (карта, фильтр и т. Д. c.) И создать новый объект или массив. Поиграйте с этим немного.
const data = {
users: [
{
_id: '5',
name: 'tomek',
},
{
_id: '6',
name: 'janek',
},
{
_id: '7',
name: 'Jakub',
},
{
_id: '8',
name: 'Piotr',
},
],
groups: [
{
users: ['5', '6'],
_id: '22',
name: 'group 1',
},
{
users: ['7'],
_id: '33',
name: 'group 2',
},
],
};
// Pack all groups and users together in "one" command
const result = [
// spread operator to spread the groups
...data.groups.map((group) => ({
// spread the group properties, you can also specify them individually
...group,
// find users with id
users: group.users.map((id) => data.users.find((user) => id === user._id)),
})),
// add a special group
{
name: 'NO_GROUP',
// filter the users
users: data.users.filter(
(user) =>
// check if user is not part of a group
!data.groups
.map((group) => group.users)
// flat() turns [["5", "6"], ["7"]] into ["5", "6", "7"]
.flat()
.includes(user._id)
),
},
];
console.log(result);