zoukankan      html  css  js  c++  java
  • js逆向递归 一个多维数组根据子节点ID查找所有父节点ID

    这个是我写的demo案例:
    
    var a = [  //数组树型结构
        {
            dir:'',
            no:'11111'
        },
        {
            dir:[
                {
                    dir:'',
                    no:'22221'
                },
                {
                    dir:[
                        {
                            dir:'',
                            no:'33332'
                        }
                    ],
                    no:'22222'
                }
            ],
            no:'11112'
        },
        {
            dir:[
                {
                    dir:[
                        {
                            dir:[],
                            no:'33333'
                        }
                    ],
                    no:'22223'
                }
            ],
            no:'11113'
        },
        {
            dir:[
                {
                    dir:[
                        {
                            dir:[
                                {
                                    dir:[],
                                    no:'44444'
                                }
                            ],
                            no:'33334'
                        }
                    ],
                    no:'22224'
                }
            ],
            no:'11114'
        },
    ]
    数组就是类似这种结构,然后我需要拿后台返回的某个子集no,查找所有相关联父级no,并把它们放到一个集合里面,下面直接贴代码:
    var b = '44444'    //这就相当于从后台返回的id值
    var vArr = []    //用来接收相关联父级id的集合
    function shellArr(obj,id){
      if(obj.length){
        obj.forEach(item => {
          if (item.dir && item.dir.length) {
            if (item.dir.some(row => row.no === id)) {  //这里利用some筛选子级有没有符合条件的,有就重新递归,没有就继续递归
              vArr.unshift(item.no)
              //重新递归
              shellArr(a,item.no)
            }else{
              //继续递归
              shellArr(item.dir, id)
            }
          }else{return}
        })
      }
    }
    shellArr(a,b);       //调用,传入a为要筛选的数组,传入b为后台返回的id值
    console.log(vArr)    //打印所有相关父级集合
    如果有错误,请小伙伴们点出来,我会继续研究的嘿嘿
    过了两天,这里有原生版的主要是为了兼容IE浏览器
      function tree(list,id){
        for(var i=0;i<list.length;i++){
            if(list[i].dir && list[i].dir.length){
                for(var j=0;j<list[i].dir.length;j++){
                    if(list[i].dir[j].no == id){
                        vArr.unshift(list[i].no)
                        tree(a,list[i].no)
                        return
                    }else{
                        tree(list[i].dir,id)
                    }
                }
            }else{
                continue
            }
        }
    }
      formTree(a,b)
    
  • 相关阅读:
    面向对象程序设计寒假作业2
    终于开通了园子里的贴号
    java中与类继承相关的知识点
    动态代理机制之查看一个类或接口中有哪些方法
    动态代理
    xml与html的区别
    深入理解linux i节点(inode)
    netstat命令
    关于C++ const 的全面总结
    linux 下 进程和线程的区别
  • 原文地址:https://www.cnblogs.com/ss-jojo/p/14468961.html
Copyright © 2011-2022 走看看