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

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

function getParentId(list,id) {
  for (let i in list) {
      if(list[i].id===id){
         return [list[i]]
      }
      if(list[i].subMenuList!=null){
          let node = getParentId(list[i].subMenuList,id);
          if(node!==undefined){
            return node.concat(list[i])
          }
       }
     }
}

二、根据ID获取该节点的对象

function getId(list,id) {
        for (let i in list) {
            if(list[i].id==id){
            return [list[i]]
          }
          if(list[i].subMenuList){
            let node=getParentId(list[i].subMenuList,id);
            if(node!==undefined){
                return node;
               }
          }
        }    
    }

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

function getNodeId(list,newNodeId=[]) {
        for (let i in list) {
            newNodeId.push(list[i])
          if(list[i].subMenuList){
                  getNodeId(list[i].subMenuList,newNodeId);
            }
        } 
        return newNodeId;      
    }

      //查找id=4的所有子级节点
    let objId=getId(data2,4);
    let childId=getNodeId(objId);//打印出来就是想要的数据 

参考:Js 树形数据递归查询该节点的所有父级节点、查询该节点的所有子节点 - Empress& - 博客园

  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
查询一个节点的所有父级节点并返回树形结构数据,可以使用递归的方式实现。具体的实现方式如下: 首先定义一个节点类: ``` public class Node { private String id; private String name; private String parentId; private List<Node> children; // 省略 getter 和 setter 方法 } ``` 然后定义一个方法来查询节点的所有父级节点: ``` public List<Node> queryParentNodes(String nodeId, List<Node> allNodes) { List<Node> result = new ArrayList<>(); Node node = null; // 遍历所有节点,找到指定节点 for (Node n : allNodes) { if (n.getId().equals(nodeId)) { node = n; break; } } if (node != null) { // 如果找到了指定节点,则递归查询其所有父节点 String parentId = node.getParentId(); if (parentId != null) { List<Node> parentNodes = queryParentNodes(parentId, allNodes); node.setChildren(parentNodes); } result.add(node); } return result; } ``` 这个方法接受两个参数,一个是要查询节点的 ID,另一个是所有节点的列表。它会遍历所有节点,找到指定节点,然后递归查询其所有父节点,并将其构造成树形结构返回。如果找不到指定节点,则返回空列表。 使用示例: ``` List<Node> allNodes = new ArrayList<>(); // 添加所有节点到列表中,这里省略代码 List<Node> parentNodes = queryParentNodes("nodeId", allNodes); // 处理 parentNodes,将其转换成前端需要的数据格式,这里省略代码 ``` 这里的 "nodeId" 是要查询节点的 ID,需要替换成实际的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值