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

如何统计嵌套对象中指定key出现次数?JS代码结果异常排查

嵌套数据中child字段计数错误的排查与修复

问题描述

嵌套结构数据中child字段实际出现6次,但现有统计代码的控制台输出计数能到7,最终返回的总计数却始终为1,无法得到正确结果。

原代码问题分析

  1. 递归计数未累加:递归调用countChild(child, cnt)时,没有接收递归返回的计数结果。JavaScript是值传递,递归内部对cnt的修改不会影响外层变量,导致外层cnt始终只累加当前层级的计数,无法汇总递归层级的结果。
  2. 无效计数触发:遍历数组时,无论元素是否包含child字段,都会执行cnt = cnt +1。比如数据中id="3"的元素没有child,却被误加了1,这就是控制台计数到7的原因。

修复后的代码

let data = [{
  "id": "1",
  "child": [
    {
      "id": "12",
      "child": [
        {
          "id": "123",
          "child": [
           {
            "id": "1234"
           }
          ]
        }
      ]
    },
    {
      "id": "2",
      "child": [
        {
          "id": "22"
        }
      ]
    },
    {
      "id": "3"
    },
    {
      "id": "4",
      "child": [
        {
          "id": "42",
          "child": [
            {
              "id": "43"
            }
          ]
        }
      ]
    }
  ]
}]

const countChild = (arr, cnt = 0) => {
  for (const item of arr) {
    // 仅当元素存在有效的child数组时才计数
    if (item.child && Array.isArray(item.child)) {
      cnt += 1;
      // 累加递归调用返回的计数结果
      cnt = countChild(item.child, cnt);
    }
  }
  return cnt;
};

console.log("Final count", countChild(data)); // 输出6,符合预期

修复说明

  • 有效计数判断:新增item.child && Array.isArray(item.child)的判断,确保只有存在有效child数组的元素才被计数,避免无效计数。
  • 递归结果累加:将递归调用的返回值赋值给cnt,让外层计数能汇总所有递归层级的child数量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:40:31