let a =
[
{
Name: 'Ravindra',
Sports: ['Chess', 'Cricket'],
},
{
Name: 'Ravi',
Sports: ['Cricket', 'Football'],
},
{
Name: 'Rishabh',
Sports: ['Table-Tennis', 'Football'],
},
]
const result = a.reduce((groupedSports, person) => {
const Sports = person.Sports
if(groupedSports[Sports]== null) groupedSports[Sports] = []
groupedSports[Sports].push(person)
return groupedSports
}, {})
console.log(result)
expected output
// Chess: [‘Ravindra’] }, { Cricket: [‘Ravindra’,'Ravi'] }, { Football: [‘Ravi’, ‘Rishabh’] }, { Table-Tennis: [‘Rishabh']}]
I was able to group according to the Sports, but sports is an array. how do i group it by individual sports?
>Solution :
You can iterate over all sports and check if it already exists, if not, spread all current entries and add the new persons Name to the array.
let a = [{
Name: 'Ravindra',
Sports: ['Chess', 'Cricket'],
},
{
Name: 'Ravi',
Sports: ['Cricket', 'Football'],
},
{
Name: 'Rishabh',
Sports: ['Table-Tennis', 'Football'],
},
]
const result = a.reduce((groupedSports, person) => {
person.Sports.forEach((sport) => {
groupedSports[sport] = groupedSports?.[sport]
? [...groupedSports[sport], person.Name]
: [person.Name];
});
return groupedSports;
}, {});
console.log(result)