如何精简统计树形节点数量的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);
优化思路说明
- 递归适配任意层级:树形结构的本质是递归的,每个节点的子节点结构和顶层结构完全一致,因此可以通过递归调用自身处理所有层级,无需硬编码每一层的逻辑。
- 边界处理更健壮:通过
children = []的默认参数,即使节点没有children属性,也不会触发报错,而是当作空数组处理(递归返回0)。 - 代码极度精简:将多层嵌套的reduce合并为一层递归逻辑,可读性和维护性大幅提升。
测试验证
使用你提供的data数组测试,优化后的函数返回结果为11,和原始函数的输出完全一致,同时可以轻松处理更深或更浅的树形结构。
内容的提问来源于stack exchange,提问作者Cleiton Freitas
相关产品推荐
相关产品推荐

