如果分组层数是动态的,即可以是 n
层,可以使用递归函数来实现。以下是一个示例代码,展示了如何实现动态层数分组:
const _ = require('lodash');
// 示例数据
let data = [
{ category: 'A', type: 'X', subType: 'Alpha', value: 1 },
{ category: 'A', type: 'X', subType: 'Beta', value: 2 },
{ category: 'A', type: 'Y', subType: 'Alpha', value: 3 },
{ category: 'B', type: 'X', subType: 'Alpha', value: 4 },
{ category: 'B', type: 'Y', subType: 'Beta', value: 5 },
{ category: 'B', type: 'Y', subType: 'Alpha', value: 6 },
];
function groupByNLevels(data, levels) {
if (levels.length === 0) {
return data;
}
const [currentLevel, ...restLevels] = levels;
let grouped = _.groupBy(data, currentLevel);
_.forEach(grouped, (value, key) => {
grouped[key] = groupByNLevels(value, restLevels);
});
return grouped;
}
// 定义分组层级
let levels = ['category', 'type', 'subType'];
let groupedData = groupByNLevels(data, levels);
console.log(JSON.stringify(groupedData, null, 2));
在这个示例中,groupByNLevels
函数接受一个数据数组和一个包含分组层级的数组。函数使用递归的方法对数据进行逐层分组,直到没有剩余的分组层级。
你可以根据需要调整 levels
数组中的属性名和顺序,以实现不同的分组层级。运行代码后,groupedData
将包含按指定层级分组的数据。