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);

猜你喜欢

转载自blog.csdn.net/m0_66504310/article/details/130996706
今日推荐