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

层级子节点数量统计求助:遍历最多5级嵌套children数组

嵌套层级子节点数量统计解决方案

核心思路

不管嵌套层级是2-5级,都可以用广度优先遍历(BFS)或递归遍历逐层处理:

  • BFS通过队列记录当前层级的所有节点,处理完一层就统计对应数据,再将下一层节点加入队列,层级控制更直观
  • 递归则传递当前层级参数,每进入一层就更新对应层级的统计值

以下以JavaScript为例,实现两种常见统计需求:


需求1:统计每个层级的节点总数

比如根节点为第0层,其子节点为第1层,统计每层包含的节点数量

代码实现

// 示例嵌套数据结构
const data = {
  id: 'root',
  children: [
    { id: 'level1-1', children: [{ id: 'level2-1' }, { id: 'level2-2', children: [{ id: 'level3-1' }] }] },
    { id: 'level1-2', children: [{ id: 'level2-3' }] }
  ]
};

function countNodesByLevel(root) {
  const levelCounts = {};
  if (!root) return levelCounts;

  // 队列元素格式:[当前节点, 当前层级]
  const queue = [[root, 0]];

  while (queue.length > 0) {
    const [node, level] = queue.shift();
    // 累加当前层级的节点数
    levelCounts[level] = (levelCounts[level] || 0) + 1;

    // 子节点加入下一层队列
    if (node.children?.length) {
      node.children.forEach(child => queue.push([child, level + 1]));
    }
  }

  return levelCounts;
}

// 调用示例
const result = countNodesByLevel(data);
console.log(result);
// 输出:{ 0: 1, 1: 2, 2: 3, 3: 1 }

需求2:统计每个层级节点的子节点总数

即统计第N层所有节点的children数量之和

代码实现

function countChildrenByLevel(root) {
  const levelChildCounts = {};
  if (!root) return levelChildCounts;

  const queue = [[root, 0]];

  while (queue.length > 0) {
    const [node, level] = queue.shift();
    // 累加当前层级节点的子节点总数
    if (node.children?.length) {
      levelChildCounts[level] = (levelChildCounts[level] || 0) + node.children.length;
    } else {
      levelChildCounts[level] = (levelChildCounts[level] || 0) + 0;
    }

    // 子节点加入下一层队列,若需限制最多5级,可加判断:level + 1 <= 5
    if (node.children?.length) {
      node.children.forEach(child => queue.push([child, level + 1]));
    }
  }

  return levelChildCounts;
}

// 调用示例
const result2 = countChildrenByLevel(data);
console.log(result2);
// 输出:{ 0: 2, 1: 3, 2: 1, 3: 0 }

适配说明

  • 如果数据源是多根节点的数组,只需将初始队列改为rootArray.map(item => [item, 0])即可
  • 层级编号可按需调整(比如从1开始计数,只需把初始层级设为1)
  • 若需限制最多处理5级,在将子节点加入队列前添加判断:if (level + 1 <= 5)

内容的提问来源于stack exchange,提问作者Алексей Синельник

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:42:02