JS groupby 多层分组
在开发前端应用程序时,我们经常需要对数据进行分组和聚合。在JavaScript中,可以使用reduce
方法来实现数据的分组操作。在本文中,将重点介绍如何在JavaScript中实现多层分组操作,即在一个数据集中根据多个条件对数据进行分组。
准备工作
在开始之前,让我们准备一个示例数据集。假设我们有一个包含员工信息的数组,每个员工都有部门
和职务
两个属性。我们的目标是根据部门
和职务
对员工进行多层分组。
const employees = [
{ name: 'Alice', department: 'HR', position: 'Manager' },
{ name: 'Bob', department: 'HR', position: 'Staff' },
{ name: 'Charlie', department: 'IT', position: 'Engineer' },
{ name: 'David', department: 'IT', position: 'Manager' },
{ name: 'Eve', department: 'Marketing', position: 'Coordinator' },
{ name: 'Frank', department: 'Marketing', position: 'Manager' }
];
实现多层分组
要实现多层分组,我们可以使用reduce
方法和Object
对象来实现。首先,我们定义一个辅助函数groupBy
,该函数接受一个数组和一个属性名作为参数,返回按照该属性名分组后的结果。
function groupBy(array, key) {
return array.reduce((acc, obj) => {
const property = obj[key];
acc[property] = (acc[property] || []).concat(obj);
return acc;
}, {});
}
接下来,我们可以使用groupBy
函数进行多层分组。首先,按照部门
进行分组:
const departmentGroup = groupBy(employees, 'department');
console.log(departmentGroup);
运行结果如下所示:
{
HR: [
{ name: 'Alice', department: 'HR', position: 'Manager' },
{ name: 'Bob', department: 'HR', position: 'Staff' }
],
IT: [
{ name: 'Charlie', department: 'IT', position: 'Engineer' },
{ name: 'David', department: 'IT', position: 'Manager' }
],
Marketing: [
{ name: 'Eve', department: 'Marketing', position: 'Coordinator' },
{ name: 'Frank', department: 'Marketing', position: 'Manager' }
]
}
现在,我们已经按照部门
进行了一层分组。接下来,我们可以再按照职务
进行二层分组:
const nestedGroup = {};
for (const department in departmentGroup) {
nestedGroup[department] = groupBy(departmentGroup[department], 'position');
}
console.log(nestedGroup);
运行结果如下所示:
{
HR: {
Manager: [ { name: 'Alice', department: 'HR', position: 'Manager' } ],
Staff: [ { name: 'Bob', department: 'HR', position: 'Staff' } ]
},
IT: {
Engineer: [ { name: 'Charlie', department: 'IT', position: 'Engineer' } ],
Manager: [ { name: 'David', department: 'IT', position: 'Manager' } ]
},
Marketing: {
Coordinator: [ { name: 'Eve', department: 'Marketing', position: 'Coordinator' } ],
Manager: [ { name: 'Frank', department: 'Marketing', position: 'Manager' } ]
}
}
通过以上代码,我们成功实现了按照部门
和职务
进行多层分组的操作。
小结
在本文中,我们介绍了如何在JavaScript中实现多层分组操作。通过使用reduce
方法和Object
对象,我们可以方便地对数据集进行多层分组。这种技术在前端应用程序中经常被使用,特别是在展示复杂数据结构时非常有用。