使用 JS 查找树状结构最大层数

2022年03月07日

今天在工作中又碰到了一个问题,根据需求要把后端返回的数据组装成一个有很多层级的树状结构,而且每个树状结构可以通过点击按钮继续生成或者删除子节点,为了动态调整页面的宽度,我需要知道这个树状结构的最大层级到底是多少

经过考虑,最终选择使用递归函数来实现这个效果:

javascript 复制代码
var flag = 0; // 计数器,计算当前总共递归了多少层
var max = 0; // 保存最大递归层数
function getNumOfChild(arr) {
	for (var i = 0; i < arr.length; i++) {
		if (arr[i].children && arr[i].children.length > 0) {
			// 如果子节点仍然有自己的子节点,那么计数器加一,并对子子节点调用函数
			flag++;
			getNumOfChild(arr[i].children);
		} else {
			// 更新最大递归层数
			if (flag > max) {
				max = flag;
			}
		}
	}
	// 每次循环结束后,计数器减一
	if (flag !== 0) {
		flag--;
	}
}

可以写一个测试数组来看看函数能否正常运行:

javascript 复制代码
const test = [
	{ id: 1, children: null },
	{
		id: 2,
		children: [
			{
				id: 3,
				children: [
					{ id: 4, children: null },
					{
						id: 5,
						children: [
							{ id: 6, children: null },
							{ id: 7, children: null },
						],
					},
				],
			},
		],
	},
];
getNumOfChild(test);
console.log(max); // 3
相关文章

Vite项目配置本地HTTPS

React Native 开发环境安装踩坑

《JavaScript 高级程序设计》第10-16章