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

如何获取树形JS对象深度?数组根节点场景代码优化

计算类JSON结构(根为数组)的层级深度

你可以直接修改原有的深度计算函数,让它同时支持数组和普通对象作为输入,无需额外判断根节点类型或手动迭代数组元素。核心思路是把数组和对象统一视为「可遍历的层级容器」,自动处理其子元素的递归计算。

优化后的深度计算函数

function getStructureDepth(item) {
  // 非对象/数组或null,没有子层级,返回0
  if (typeof item !== 'object' || item === null) return 0;
  // 区分数组和普通对象,获取子元素集合
  const children = Array.isArray(item) ? item : Object.values(item);
  // 空容器(空数组/空对象)深度为1,否则取子元素最大深度+1(自身层级)
  return children.length === 0 ? 1 : 1 + Math.max(...children.map(getStructureDepth));
}

函数逻辑说明

  1. 基础判断:如果传入的不是对象/数组(或为null),说明是基础类型值,没有子层级,返回0。
  2. 子元素获取:数组直接取自身元素作为子项,普通对象取所有值的集合作为子项。
  3. 深度计算:
    • 空数组/空对象的深度为1(仅自身这一层)。
    • 非空容器的深度为「子元素的最大深度 + 1」(加的1是当前容器自身的层级)。

测试用例

// 单个对象结构
const singleObj = { a: { b: { c: 1 } } };
console.log(getStructureDepth(singleObj)); // 输出:3

// 数组根节点,包含不同深度的对象
const arrayRoot1 = [{ a: { b: 1 } }, { c: { d: { e: 2 } } }];
console.log(getStructureDepth(arrayRoot1)); // 输出:4

// 空数组
const emptyArray = [];
console.log(getStructureDepth(emptyArray)); // 输出:1

// 混合数组与嵌套对象的结构
const arrayRoot2 = [{ x: [1, { y: { z: 3 } }] }, 5];
console.log(getStructureDepth(arrayRoot2)); // 输出:4

对比原有方案的优势

原来的写法可能需要单独判断根节点是否为数组,再手动遍历数组元素计算深度后取最大值,而优化后的函数无需额外判断逻辑,无论传入的是单个对象还是对象数组,直接调用即可得到正确的整体深度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:45:29