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

如何遍历嵌套Object并提取所有子键路径为独立array?

遍历嵌套对象并提取所有完整键路径数组

需求说明

需要遍历一个嵌套对象,将所有叶子节点的完整键路径提取为独立数组,最终可格式化为逗号分隔的字符串。

给定示例对象:

{
    "A": {
        "C": {
            "G": {}
        }
    },
    "B": {
        "D": {
            "G": {}
        },
        "E": {
            "H": {}
        },
        "F": {
            "I": {
                "H": {}
            },
            "J": {}
        }
    }
}

期望输出的路径格式:

A,C,G
B,D,G
B,E,H
B,F,J
B,F,I,H

解决方案(JavaScript实现)

用递归方式遍历对象,维护当前路径,遇到叶子节点(空对象)时记录完整路径:

function getNestedPaths(obj, currentPath = [], result = []) {
  for (const key of Object.keys(obj)) {
    const newPath = [...currentPath, key];
    // 判定当前节点为叶子节点(无子属性的空对象)
    if (Object.keys(obj[key]).length === 0) {
      result.push(newPath);
    } else {
      // 递归处理子对象
      getNestedPaths(obj[key], newPath, result);
    }
  }
  return result;
}

// 测试示例
const testObj = {
    "A": {
        "C": {
            "G": {}
        }
    },
    "B": {
        "D": {
            "G": {}
        },
        "E": {
            "H": {}
        },
        "F": {
            "I": {
                "H": {}
            },
            "J": {}
        }
    }
};

// 获取所有路径数组
const paths = getNestedPaths(testObj);
// 输出逗号分隔的格式
paths.forEach(path => console.log(path.join(',')));

逻辑说明

  1. 函数接收三个参数:待遍历的目标对象、当前累积的路径数组、存储结果的数组(默认空数组)
  2. 遍历当前对象的所有键,生成包含当前键的新路径
  3. 检查当前键对应的子对象是否为空:如果是,说明到达叶子节点,将新路径加入结果;否则递归处理子对象
  4. 最终返回的结果数组中,每个元素就是一条完整的键路径,用join(',')即可转为需求的字符串格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:20:49