Dùng Array.prototype.reduce() — O(n), single pass, không dependency.
Implementation
function groupBy(array, key) {
return array.reduce((acc, obj) => {
const k = obj[key];
if (!acc[k]) acc[k] = [];
acc[k].push(obj);
return acc;
}, {});
}
// Usage
const people = [
{ name: 'Lee', age: 21 },
{ name: 'Ajay', age: 20 },
{ name: 'Jane', age: 20 }
];
console.log(groupBy(people, 'age'));
Output
{
20: [{ name: 'Ajay', age: 20 }, { name: 'Jane', age: 20 }],
21: [{ name: 'Lee', age: 21 }]
}
Biến thể
keylà function:groupBy(arr, x => x.age).- Dùng
Mapthay object để giữ key type (number, object...). - Lodash:
_.groupBy(arr, 'age').