树结构数组,js实现点击某个节点,显示该节点对应的所有父级节点
现有测试数组结构如下:如果输入的id为20102显示的对应结果应该是['黑龙江','哈尔滨','呼兰区']
city=[
{
name:"北京",
id:1,
},
{
name:"黑龙江",
id:2,
children:[
{
name:'哈尔滨',
id:20001,
children:[
{name:"松北区",
id:20101},
{name:"呼兰区",
id:20102},
{name:"双城区",
id:20103},
]
},
{
name:'齐齐哈尔',
id:20002,
children:[
{name:"龙沙区",
id:20201},
{name:"建华区",
id:20202},
{name:"富拉尔基区",
id:20203},
]
},
{
name:'牡丹江',
id:20003,
children:[
{name:"东安区",
id:20301},
{name:"西安区",
id:20302},
{name:"爱民区",
id:20303},
]
},
{
name:'佳木斯',
id:20004,
children:[
{name:"富锦市",
id:20401},
{name:"同江市",
id:20402},
{name:"向阳区",
id:20403},
]
}
]
}
]
js代码
var newArr=[],jsontxt={},jsonId={},currentId=20102,name="呼兰区"
function func(){
city.map(v=>{
jsontxt[v.name]={};
jsonId[v.id]={}
if(v.id===currentId){
newArr.push(v.name)
}else{
if(v.children)func2(v.children,jsontxt[v.name],jsonId[v.id],v.name,v.id)
}
})
}
function func2(data,json,json2,key,key2){
data.map(v=>{
json[v.name]={};
json2[v.id]={};
if(v.id===currentId){
newArr.push(key);
fun3(jsontxt[key],jsonId[key2])
}else{
if(v.children)func2(v.children,json[v.name],json2[v.id],key,key2)
}
})
}
fun3(data,data2){
for(var i in data2){
if(i===currentValue){
for(var j in data){
if(j===name)newArr.push(j)
}
}else{
for(var k in data){
if(!data2[currentId] && data[name] && JSON.stringify(data2[i])!=='{}' &&JSON.stringify(data[k])!=='{}'){
newArr.push(k);
func3(data[k],data2[i])
}
}
}
}
}
func();
后期继续优化代码.........