1. 前言
最近在做树拖拽排序以及调整层级时,理论上支持无限级嵌套,实际上还是限制了最多嵌套 3 层。这里就涉及到获取拖拽节点的最大层数,也就是树的最大层数。
2. 数结构
const tree = [
{
key: "1",
label: "节点 1",
expanded: true,
children: [
{
key: "1-1",
label: "节点 1-1"
},
{
key: "1-2",
label: "节点 1-2"
},
{
key: "1-3",
label: "节点 1-3",
children: [
{
key: "1-3-1",
label: "节点 1-3-1"
}
]
}
]
},
{
key: "2",
label: "节点 2",
children: [
{
key: "2-1",
label: "节点 2-1"
},
{
key: "2-2",
label: "节点 2-2"
},
{
key: "2-3",
label: "节点 2-3"
}
]
},
{
key: "3",
label: "节点 3"
}
];
3. 代码实现
实现思路无非就是循环获取子节点层数,然后取最大值呗。
// 获取拖动节点层数
function getNodeLevel(node) {
let maxLevel = 0;
function callback(item, level) {
level++;
maxLevel = Math.max(level, maxLevel);
const children = item?.children || [];
for (let i = 0; i < children.length; i++) {
callback(children[i], level);
}
}
callback(node, 0);
return maxLevel;
}