在一次面试中,遇到一个问题,如何将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);
}
}