You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过visible属性过滤精简树节点并返回修改后的结果

问题排查

原有代码存在两处核心错误:

  • for循环边界错误:使用i <= node.children.length作为判断条件,数组下标从0开始,最大下标为length-1,会导致最后一次循环读取node.children[node.children.length]得到undefined,触发异常逻辑
  • 返回值逻辑错误:原有判断if(!node || !node?.children) return;会导致无子节点的合法节点返回undefined而非节点本身,同时递归顺序不合理,容易残留子树内的非法节点

修正后代码

function reduceTree(node: any): any {
    // 空节点直接返回空
    if (!node) return null;
    // 没有children的合法节点直接返回自身
    if (!Array.isArray(node.children)) return node;

    // 先递归处理所有子节点,再过滤不符合可见性要求的节点
    const processedChildren = node.children
        .map(child => reduceTree(child))
        .filter(child => {
            return child && (child.visible === undefined || child.visible === true);
        });

    node.children = processedChildren;
    return node;
}

console.log(reduceTree(data));

逻辑说明

  • 调整递归顺序:先对每个子节点做深度递归处理,再对处理完成的子节点做过滤,避免子树内的非法节点残留
  • 修正边界判断:只在空节点时返回null,无子节点的合法节点正常返回自身,不会丢失符合要求的叶子节点
  • 过滤逻辑合并了空节点校验,避免处理后的空子节点残留在children数组中

内容的提问来源于stack exchange,提问作者user15361861

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:21:01