js一维数组还原树形结构

js一维数组还原树形结构,今天下面的例子涉及到对数组的操作,写下笔记留着备用 给出如下一维数组 1234567var arr = [     &nbsp…

js一维数组还原树形结构,今天下面的例子涉及到对数组的操作,写下笔记留着备用
给出如下一维数组

1
2
3
4
5
6
7
var arr = [
        {id:1,pid:null,name:'中国'},
        {id:2,pid:1,name:'湖北省'},
        {id:3,pid:2,name:'武汉市'},
        {id:4,pid:2,name:'恩施州'},
        {id:5,pid:1,name:'四川省'},
    ];

请写一个函数将 arr 转成如下,树状结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
obj = {
        id:1,
        pid:null,
        name:'中国',
        child:[
            {
                id:2,
                pid:1,
                name:'湖北省',
                child:[
                    {
                        id:3,
                        pid:2,
                        name:'武汉市'
                    },
                    {
                        id:4,
                        pid:2,
                        name:'恩施州'
                    }
                ]
            },
            {
                id:5,
                pid:1,
                name:'四川省'
            }
        ]
    };

下面是一个完成上面需求的函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    function t(arr,removeIndex){
        if(removeIndex instanceof Array){
            for(var index of removeIndex.reverse()){
                arr.splice(index,1);
            }
        }

        if(arr.length == 1) return arr[0];

        var indexArr = arr.map(function(obj,index){
            return obj.pid;
        })

        var maxPid = Math.max.apply(null,indexArr);//找到底层的pid

        var removeIndex = [];

        var pushArr = arr.filter(function(obj,index){
            if(obj.pid == maxPid){
                removeIndex.push(index);
            }
            return obj.pid == maxPid;
        });//找到最底层的 数据

        var currentIndex = arr.findIndex(function(obj,index){
            return  obj.id == maxPid
        });//找到最底层的上一层

        arr[currentIndex].child = pushArr;//将最底层数据放到上一层的数据中

        return t(arr,removeIndex);//依次递归
    }

    t(arr);

下在逆推回去

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function t1(obj,arr){
        if(!(arr instanceof Array)){
            arr = [];
        }
        if(obj.child instanceof Array){
            child = obj.child;
            for(var _obj of child){
                t1(_obj,arr)               
            }
        }
        delete obj.child;
       
        arr.push(obj);
        return arr;
    }

作者: huanggr

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注