zoukankan      html  css  js  c++  java
  • Js 树形数据递归查询该节点的所有父级节点、查询该节点的所有子节点

    Js 递归树形数据查询该节点的所有父级节点、查询该节点的所有子节点等

    数据

    var  data2= [
             {
              id: 1,
              label: '一级 1',
              children: [{
                id: 4,
                label: '二级 1-1',
                children: [{
                  id: 9,
                  label: '三级 1-1-1'
                }, {
                  id: 10,
                  label: '三级 1-1-2'
                }]
              }]
            }, 
            {
              id: 2,
              label: '一级 2',
              children: [{
                id: 5,
                label: '二级 2-1'
              }, {
                id: 6,
                label: '二级 2-2'
              }]
            }, 
            {
              id: 3,
              label: '一级 3',
              children: [{
                id: 7,
                label: '二级 3-1'
              }, {
                id: 8,
                label: '二级 3-2'
              }]
            }];
        
    

    方法

    根据ID获取该节点的所有父节点的对象

      function getParentId(list,id) {
            for (let i in list) {
                if(list[i].id==id){
                return [list[i]]
              }
              if(list[i].children){
                let node=getParentId(list[i].children,id);
                if(node!==undefined){
                    return node.concat(list[i])
                   }
              }
            }        
        }
               getParentId(data2,10)//打印出来就是想要的数据
    

    根据ID获取该节点的对象

    function getId(list,id) {
            for (let i in list) {
                if(list[i].id==id){
                return [list[i]]
              }
              if(list[i].children){
                let node=getParentId(list[i].children,id);
                if(node!==undefined){
                    return node;
                   }
              }
            }    
        }
    
          getId(data2,4)//打印出来就是想要的数据
    

    根据ID获取所有子节点的对象,首先把该节点的对象找出来,上面getId()这个方法

      function getNodeId(list,newNodeId=[]) {
            for (let i in list) {
                newNodeId.push(list[i])
              if(list[i].children){
                      getNodeId(list[i].children,newNodeId);
                }
            } 
            return newNodeId;      
        }
    
          //查找id=4的所有子级节点
        let objId=getId(data2,4);
        let childId=getNodeId(objId);//打印出来就是想要的数据 
    

    我这里的方法都是查找的对象,如果只是返回ID,根据需要Push的时候改成Push id 即可。

  • 相关阅读:
    PHPStorm打开文件所在目录
    登录顺序图与项目部署图
    JAVA配置Tomcat
    设计模式与足球
    JAVA设计模式之【模板方法模式】
    JAVA设计模式之【策略模式】
    JAVA设计模式之【状态模式】
    JAVA设计模式之【观察者模式】
    phpstorm 或 webstorm 设置打开多个项目,多个项目并存。
    JAVA设计模式之【迭代器模式】
  • 原文地址:https://www.cnblogs.com/wangliko/p/14271202.html
Copyright © 2011-2022 走看看