JS笔记01--js数组转换成tree结构数组

在一次面试中,遇到一个问题,如何将web请求获取到的一个list,通过js将list转换称对应的树形数据,以便树结构调用,下面我对当时写的代码进行了记录。本人不是前端工程师,js使用不是太多,如果大家有更好的想法或则建议请留言指导。 

var list = [
    {
        "id":"1",
        "name":"乌鲁木齐市",
        "pid":"0"
    },
    {
        "id":"2",
        "name":"昌吉市",
        "pid":"0"
    },
    {
        "id":"3",
        "name":"克拉玛依市",
        "pid":"0"
    },
    {
        "id":"4",
        "name":"米东区",
        "pid":"1"
    },
    {
        "id":"5",
        "name":"卡字湾",
        "pid":"4"
    },
    {
        "id":"6",
        "name":"天山",
        "pid":"1"
    },
    {
        "id":"8",
        "name":"红光山小区",
        "pid":"5"
    }
];

var tree_emp = {};
var tree = [];
listToTree( list );
function listToTree(list) {
    //转换成对象
    for( let i=0; i<list.length; i++){
        tree_emp[list[i].id] = list[i];
    }
    tree_emp["0"] = {"id":"0","name":"root"};
    //寻找子节点
    for( let i=0; i<list.length; i++){
        if( tree_emp[list[i].pid] != undefined && tree_emp[list[i].pid] != undefined){
            if ( tree_emp[list[i].pid]["nodes"] == undefined){
                tree_emp[list[i].pid]["nodes"] = [];
            }
            tree_emp[list[i].pid]["nodes"].push(list[i].id);
        }
    }
    console.log(tree_emp);
    //组装完毕
    for( let i =0; i < tree_emp["0"].nodes.length; i++ ){
        toTree(tree_emp[tree_emp["0"].nodes[i]],tree);
    }
    console.log(tree.node);
}

function toTree( c,p ){
    if ( c.nodes == undefined || c.nodes == null || c.nodes.length == 0 ){
        if( p.node == undefined ){
            p.node = [];
        }
        delete c.nodes;
        p.node.push(c);
        return p;
    }else{
        //存在子节点;
        for( let i =0; i < c.nodes.length; i++ ){
            if( p.node == undefined ){
                p.node = [];
            }
            toTree(tree_emp[c.nodes[i]],c);
        }
        delete c.nodes;
        p.node.push(c);

    }
}

猜你喜欢

转载自blog.csdn.net/qq_34955471/article/details/106653428