JavaScript/Node.js如何获取对象属性的层级深度
获取嵌套对象属性的层级深度
问题说明
给定嵌套对象:
let obj = { a: "a", b: { c: "c", d: { e: "e" } } }
需要获取指定属性的层级深度,比如属性e的访问路径是obj.b.d.e,深度可按两种逻辑定义:4(包含根对象obj)或3(仅统计属性层级),两种都合理,取决于具体需求。
实现方案
递归遍历法
通过递归遍历对象所有属性,找到目标属性时返回当前层级:
function getPropertyDepth(obj, targetProp, currentDepth = 1) { if (!obj || typeof obj !== 'object') return 0; if (obj.hasOwnProperty(targetProp)) { return currentDepth; } for (const key of Object.keys(obj)) { const depth = getPropertyDepth(obj[key], targetProp, currentDepth + 1); if (depth > 0) return depth; } return 0; } // 测试示例 let obj = { a: "a", b: { c: "c", d: { e: "e" } } }; console.log(getPropertyDepth(obj, 'e')); // 输出4(包含根对象层级) // 若要得到仅属性层级的深度(3),修改返回值为 currentDepth - 1 即可
路径拆分法
如果已知属性的完整访问路径,直接拆分路径计算长度:
function getDepthFromPath(path) { const segments = path.split('.').filter(seg => seg); return segments.length; } console.log(getDepthFromPath('obj.b.d.e')); // 输出4 console.log(getDepthFromPath('b.d.e')); // 输出3
注意事项
- 若对象存在同名属性,方法会返回第一个找到的属性的层级深度;
- 目标属性不存在时,返回0表示未找到;
- 需提前明确层级的计数逻辑:是否包含根对象。
内容的提问来源于stack exchange,提问作者Rahabib
相关产品推荐
相关产品推荐

