如何遍历嵌套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(',')));
逻辑说明
- 函数接收三个参数:待遍历的目标对象、当前累积的路径数组、存储结果的数组(默认空数组)
- 遍历当前对象的所有键,生成包含当前键的新路径
- 检查当前键对应的子对象是否为空:如果是,说明到达叶子节点,将新路径加入结果;否则递归处理子对象
- 最终返回的结果数组中,每个元素就是一条完整的键路径,用
join(',')即可转为需求的字符串格式
内容的提问来源于stack exchange,提问作者throne three
相关产品推荐
相关产品推荐

