树结构数组,js实现点击某个节点,显示该节点对应的所有父级节点

树结构数组,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();

后期继续优化代码.........

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值