====== Using reduce to group people by age ======
In this example, the accumulator starts as an empty object {}, and the function is applied to each person object in the people array.
This function is a neat example of how you can use **reduce** in conjunction with other modern JavaScript features like **destructuring** and the **nullish coalescing operator** to concisely perform a complex transformation on an array.
function groupPeople(people) {
if (people !== null && Array.isArray(people) && Array(people).length !== 0 && typeof people[0] === 'object') {
let groupedPeopleByAge = people.reduce((group, person) => {
const { age } = person; //destructuring
group[age] = group[age] ?? []; //nullish coalescing operatorn
group[age].push(person.name);
return group;
}, {});
return groupedPeopleByAge;
}
return [];
}
let people = [
{ name: "Alice", age: 25 },
{ name: "Bob", age: 25 },
{ name: "Charlie", age: 30 },
{ name: "David", age: 30 },
{ name: "Eve", age: 25 }
];
let groupedPeopleByAge = groupPeople(people);
console.log(groupedPeopleByAge);
Output:
{ '25': [ 'Alice', 'Bob', 'Eve' ], '30': [ 'Charlie', 'David' ] }