Made sample of code -
Interface -
interface IInterface {
id: number;
name: string;
age: number;
}
array -
const arr: IInterface[] = [
{
id: 1,
name: 'daniel',
age: 12
},
{
id: 2,
name: 'jonny',
age: 13
},
{
id: 3,
name: 'daniel',
age: 12
},
{
id: 4,
name: 'daniel',
age: 12
}
]
GroupBy function -
const GroupBy = (
array: IInterface[],
f: (element: IInterface) => (string | number | undefined)[]
) => {
const groups: { [key: string]: IInterface[] } = {};
array.forEach((object) => {
const group = f(object).join("-");
groups[group] = groups[group] || [];
groups[group].push(object);
});
return groups;
};
Using the groupBy function -
const Grouped = GroupBy(arr, (element: IInterface) => {
return [
element.name, element.age,
];
});
Result now -
{
"daniel-12": [
{
"id": 1,
"name": "daniel",
"age": 12
},
{
"id": 3,
"name": "daniel",
"age": 12
},
{
"id": 4,
"name": "daniel",
"age": 12
}
],
"jonny-13": [
{
"id": 2,
"name": "jonny",
"age": 13
}
]
}
Wanted result -
{
"daniel-12-ids-1-3-4": [
{
"id": 1,
"name": "daniel",
"age": 12
},
{
"id": 3,
"name": "daniel",
"age": 12
},
{
"id": 4,
"name": "daniel",
"age": 12
}
],
"jonny-13-ids-2": [
{
"id": 2,
"name": "jonny",
"age": 13
}
]
}
Need that all the group id's will by at the key name .......................................................................................................................................................