📊 Native GroupBy Finally Arrived
_.groupBy() required Lodash. Object.groupBy() is now native. Group arrays by any criteria. No more manual reduce hacks.
📝 Basic Usage
const users = [
{ name: 'Alice', role: 'admin' },
{ name: 'Bob', role: 'user' },
{ name: 'Charlie', role: 'admin' },
{ name: 'Diana', role: 'user' }
];
// Group by role
const grouped = Object.groupBy(users, user => user.role);
// Result:
// {
// admin: [{ name: 'Alice', role: 'admin' }, { name: 'Charlie', role: 'admin' }],
// user: [{ name: 'Bob', role: 'user' }, { name: 'Diana', role: 'user' }]
// }
console.log(grouped.admin.length); // 2
🎯 Real-World Examples
// Group by date (orders)
const orders = [
{ id: 1, date: '2024-01-15', total: 100 },
{ id: 2, date: '2024-01-15', total: 200 },
{ id: 3, date: '2024-01-16', total: 150 }
];
const byDate = Object.groupBy(orders, order => order.date);
// {
// '2024-01-15': [order1, order2],
// '2024-01-16': [order3]
// }
// Group by first letter
const words = ['apple', 'banana', 'apricot', 'blueberry', 'avocado'];
const byFirstLetter = Object.groupBy(words, word => word[0]);
// {
// a: ['apple', 'apricot', 'avocado'],
// b: ['banana', 'blueberry']
// }
// Group by even/odd
const numbers = [1, 2, 3, 4, 5, 6];
const byParity = Object.groupBy(numbers, n => n % 2 === 0 ? 'even' : 'odd');
// Group by age bracket
const people = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 32 },
{ name: 'Charlie', age: 28 },
{ name: 'Diana', age: 45 }
];
const byAgeGroup = Object.groupBy(people, p => {
if (p.age < 30) return '20s';
if (p.age < 40) return '30s';
return '40+';
});
✅ Map.groupBy for Maps
// Map.groupBy returns Map instead of Object
const usersMap = Map.groupBy(users, user => user.role);
// Map {
// 'admin' => [user1, user3],
// 'user' => [user2, user4]
// }
usersMap.get('admin'); // Array of admin users
💡 Browser Support
- Chrome 117+ ✅
- Firefox 119+ ✅
- Safari 17.4+ ✅
- Edge 117+ ✅
- Fallback: Use reduce() for older browsers
"Wrote groupBy with reduce so many times. Object.groupBy is simpler, faster, and native. Removed Lodash from dashboard bundle. Saved 40KB."
