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

如何精简统计树形节点数量的JavaScript函数代码?

优化树形结构记录统计函数

你的原始函数虽然能正常工作,但存在硬编码层级的问题——只能处理固定4层的树形结构,且代码冗余度极高。可以通过递归思想大幅精简代码,同时让函数支持任意深度的树形结构:

精简实现方案

基础递归版本

const countRecords = (nodes) => {
  return nodes.reduce((total, node) => {
    // 当前节点计数+1,加上子节点的总计数(递归处理)
    return total + 1 + (node.children ? countRecords(node.children) : 0);
  }, 0);
};

更简洁的箭头函数版本

利用解构赋值和默认参数进一步压缩代码:

const countRecords = nodes => nodes.reduce((total, { children = [] }) => total + 1 + countRecords(children), 0);

优化思路说明

  1. 递归适配任意层级:树形结构的本质是递归的,每个节点的子节点结构和顶层结构完全一致,因此可以通过递归调用自身处理所有层级,无需硬编码每一层的逻辑。
  2. 边界处理更健壮:通过children = []的默认参数,即使节点没有children属性,也不会触发报错,而是当作空数组处理(递归返回0)。
  3. 代码极度精简:将多层嵌套的reduce合并为一层递归逻辑,可读性和维护性大幅提升。

测试验证

使用你提供的data数组测试,优化后的函数返回结果为11,和原始函数的输出完全一致,同时可以轻松处理更深或更浅的树形结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:20:31