指定对象数组某些元素,转换为tree结构

文章讲述了如何利用lodash库,根据给定的属性标签对一个对象数组进行分层处理,构建出树形结构。递归函数首先处理最外层,然后逐层深入,直到所有层级都被处理,最终形成一个完整的树结构数据。

实现目标表:

一个对象数组data,能够指定分层的属性,返回一个tree结构

实现辅助工具:lodash

实现注意:

递归实现,需要处理好递归函数的返回值(第一层、第二层...);注意先实现层与层之间的处理逻辑,最后在处理端点结束条件

实现代码如下:

// 原始对象数组
const data = [
{
    equipmentPId: '一级分类id1',
    equipmentPName: '一级分类name1',
    equipmentId: '二级分类id1',
    equipmentName: '二级分类name1'    
},
{
    equipmentPId: '一级分类id1',
    equipmentPName: '一级分类name1',
    equipmentId: '二级分类id2',
    equipmentName: '二级分类name2'    
},
{
    equipmentPId: '一级分类id3',
    equipmentPName: '一级分类name3',
    equipmentId: '二级分类id1',
    equipmentName: '二级分类name1'    
},{
    equipmentPId: '一级分类id1',
    equipmentPName: '一级分类name1',
    equipmentId: '二级分类id3',
    equipmentName: '二级分类name3'    
}
];

// 定义入参层级tag数组,指明分层依据字段
const nodesTag = [{key: 'equipmentPId', label: 'equipmentPName'}, {key: 'equipmentId', label: 'equipmentName'}];

// 递归实现
function buildTreeNodes(data, nodesTag) {
    const res = [];
    if (nodesTag.length > 0) {
        // 指定最外层数据结构
        const childrenNodes = _.groupBy(data, _.get(nodesTag, [0]).key);
        _.forEach(childrenNodes, (item, key) => {
            const param = {
                key: key,
                label: _.get(item,[0])[nodesTag[0].label],
                // 递归实现第二层
                children: buildTreeNodes(item, _.slice(nodesTag, 1))
            };
            res.push(param);
        })
    }
    return res;
}

// 调用buildTreeNodes递归函数
buildTreeNodes(data, nodesTag);

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值