如何递归校验树节点所有层级的visible属性?
问题分析
原函数仅校验了当前节点的直接一级子节点的visible属性,没有处理子节点还包含嵌套后代的场景,需要新增递归逻辑向下遍历所有层级的节点。
修改后的代码
nodeHasAllChildren(node: TreeNode) { // 边界处理和原函数保持一致:节点不存在/无后代时返回false if (!node?.children) return false; return node.children.every((child) => { // 校验当前子节点自身是否不可见 const curNodeInvisible = child?.visible === false; // 若当前子节点还有后代,递归校验其所有后代是否全部不可见 const descendentsAllInvisible = child?.children ? this.nodeHasAllChildren(child) : true; return curNodeInvisible && descendentsAllInvisible; }); }
逻辑说明
- 边界逻辑和原函数完全兼容,不会影响原有业务的判断结果
- 每个子节点需要同时满足两个条件才会判定为符合要求:
- 自身
visible属性为false - 如果存在嵌套子节点,所有嵌套后代的
visible属性全部为false
- 自身
- 如果你的业务逻辑里「没有子节点的节点需要返回true」,只需要把第一行的边界返回值改为
return true即可。
内容的提问来源于stack exchange,提问作者user15361861
相关产品推荐
相关产品推荐

