joken-前端工程师

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::

如果分组层数是动态的,即可以是 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 将包含按指定层级分组的数据。

posted on 2024-07-27 11:37  joken1310  阅读(93)  评论(0)    收藏  举报