对象层级计算有递归和迭代两种方法:递归方法使用递归函数,从根节点开始计算每个属性子节点的层级,返回最大深度;迭代方法使用队列,从根节点开始,将每个节点的层级加一,将子节点入队,循环直至队列为空,返回最大层级。例如,对于对象 { a: { b: { c: null, d: null } }, e: null }, 递归方法和迭代方法计算的层级均为 3。

如何计算对象层级
计算对象层级的目的是确定一个对象在对象树中的深度。层级从根节点开始为 0,其子节点层级加 1,依此类推。
方法
计算对象层级有两种常用方法:
递归方法
- 定义递归函数
getDepth(object)。 - 在函数中,如果
object是null,返回 0。 - 对
object的每个属性,递归调用getDepth(object[property]),并将结果加 1。 - 返回最大深度。
迭代方法
技术上面应用了三层结构,AJAX框架,URL重写等基础的开发。并用了动软的代码生成器及数据访问类,加进了一些自己用到的小功能,算是整理了一些自己的操作类。系统设计上面说不出用什么模式,大体设计是后台分两级分类,设置好一级之后,再设置二级并选择栏目类型,如内容,列表,上传文件,新窗口等。这样就可以生成无限多个二级分类,也就是网站栏目。对于扩展性来说,如果有新的需求可以直接加一个栏目类型并新加功能操作
- 创建一个队列,将根节点入队。
- 设置层级为 0。
-
循环,直到队列为空:
- 出队第一个节点
node。 - 将
node的层级设置为当前层级。 - 将
node的所有子节点入队。 - 增加当前层级。
- 出队第一个节点
- 返回最大层级。
示例
假设有以下对象:
const object = {
a: {
b: {
c: null,
d: null
}
},
e: null
};递归方法
function getDepth(object) {
if (object === null) {
return 0;
}
let maxDepth = 0;
for (const property in object) {
maxDepth = Math.max(maxDepth, getDepth(object[property]) + 1);
}
return maxDepth;
}
const depth = getDepth(object); // 3迭代方法
function getDepth(object) {
const queue = [object];
let depth = 0;
while (queue.length > 0) {
const node = queue.shift();
node.depth = depth;
for (const property in node) {
if (node[property] !== null) {
queue.push(node[property]);
}
}
depth++;
}
return depth - 1;
}
const depth = getDepth(object); // 3









