js树转平与平转树结构

树形结构转平面结构

let data = [
            {
                id: 1, pid: 0, name: '沃尔玛',
                childrens: [
                    {
                        id: 2, pid: 1, name: '生鲜区',
                        childrens: [
                            {
                                 id: 4,
                                 pid: 2,
                                 name: '鱼',
                                 childrens:[
                                    {
                                        id:8,
                                        pid:4,
                                        name:'金鱼',
                                    },
                                    {
                                        id:9,
                                        pid:4,
                                        name:'带鱼',
                                    }
                                 ]
                             },
                            { id: 5, pid: 2, name: '牛肉' }
                        ]
                    },
                    {
                        id: 3, pid: 1, name: '日用品区',
                        childrens: [
                            { id: 6, pid: 3, name: '卫生纸' },
                            { id: 7, pid: 3, name: '牙刷' }
                        ]
                    }
                ]
            }   
        ];
        function tree(arr) {
            var newarr = [];
            arr.forEach(item => {
                if (item.childrens) {
                    newarr.push(...tree(item.childrens))
                    delete item.childrens
                }
                newarr.push({ ...item })
            });
            return newarr
        };

        var way = tree(data);
        console.log(way);

平面结构转树形结构

 const source = [
            { id: 1, pid: null, name: '一级' },
            { id: 2, pid: 1, name: '二级' },
            { id: 3, pid: 1, name: '二级' },
            { id: 4, pid: 2, name: '三级' },
            { id: 5, pid: 2, name: '三级' },
            { id: 6, pid: 3, name: '三级' },
            { id: 7, pid: 3, name: '三级' },
            { id: 8, pid: 7, name: '四级' },
            { id: 9, pid: 7, name: '四级' }
        ];
        function arrt(arr, pid = null) {
            const res = [];
            source.forEach(item => {
                if (item.pid === pid) {
                    const children = arrt(arr.filter(e => e.pid != pid), item.id)
                    if (children.length) {
                        res.push({ ...item, children })
                    } else {
                        res.push({ ...item })
                    }
                }
            });
            return res
        }

        var tree = arrt(source);
        console.log(tree);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值