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;
}