前端tree数结构根据子级id获取所有父级id方法

5 篇文章 0 订阅
export const getLevelIdAll = (data: any[], id: any, arr: any = []) => {
    data.find((item: any) => {
        if (String(item.id) == String(id)) {
            arr.push(item.id);
            return true;
        } else if (Array.isArray(item?.children) && item?.children?.length) {
            arr = getLevelIdAll(item.children, id, arr);
            if (arr.length) {
                arr.unshift(item.id);
                return true;
            } else {
                return false;
            }
        }
        return false;
    });
    return arr;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您可以使用递归算法实现树形结构子级查询。首先,您需要根据节点的ID和parentID来构建树形结构,然后根据节点的ID查询其所有子级,或者根据子节点的ID查询其节点。以下是Java代码示例: // 树形结构节点类 public class TreeNode { private String id; private String parentId; private List<TreeNode> children; public TreeNode(String id, String parentId) { this.id = id; this.parentId = parentId; children = new ArrayList<>(); } // 添加子节点 public void addChild(TreeNode node) { children.add(node); } // 获取所有子节点 public List<TreeNode> getChildren() { return children; } // 获取节点 public TreeNode getParent() { // 查询节点 return null; } } // 构建树形结构 public static TreeNode buildTree(List<TreeNode> nodeList) { Map<String, TreeNode> map = new HashMap<>(); // 将所有节点添加到map中 for (TreeNode node : nodeList) { map.put(node.getId(), node); } // 构建树形结构 for (TreeNode node : nodeList) { if (!node.getParentId().equals("0")) { map.get(node.getParentId()).addChild(node); } } // 返回根节点 return map.get("0"); } // 根据节点ID获取所有子节点 public static List<TreeNode> getChildNodeList(TreeNode node) { List<TreeNode> childNodeList = new ArrayList<>(); if (node != null && !node.getChildren().isEmpty()) { for (TreeNode childNode : node.getChildren()) { childNodeList.addAll(getChildNodeList(childNode)); } childNodeList.addAll(node.getChildren()); } return childNodeList; } // 根据子节点ID获取节点 public static TreeNode getParentNode(TreeNode rootNode, String childId) { if (rootNode != null) { if (rootNode.getId().equals(childId)) { return null; } for (TreeNode childNode : rootNode.getChildren()) { if (childNode.getId().equals(childId)) { return rootNode; } TreeNode parentNode = getParentNode(childNode, childId); if (parentNode != null) { return parentNode; } } } return null; } // 使用示例 List<TreeNode> nodeList = new ArrayList<>(); nodeList.add(new TreeNode("0", "0")); nodeList.add(new TreeNode("1", "0")); nodeList.add(new TreeNode("2", "1")); nodeList.add(new TreeNode("3", "2")); nodeList.add(new TreeNode("4", "2")); TreeNode rootNode = buildTree(nodeList); List<TreeNode> childNodeList = getChildNodeList(rootNode); // 获取所有子节点 TreeNode parentNode = getParentNode(rootNode, "4"); // 获取节点

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值