Skip to content

树形结构转一维

利用栈实现树形结构转一维,效率可能更高,避免递归反复执行上下文引起的帧栈溢出

javascript
let tree = [
    {
        name: "home",
        meta: {
            title: "home",
            icon: "home"
        }
    },
    {
        name: "home2",
        meta: {
            title: "home",
            icon: "home"
        }
    },
    {
        name: "common-components",
        meta: {
            title: "common-components",
            icon: "set"
        },
        children: [
            {
                name: "form-component",
                meta: {
                    title: "form-component",
                    icon: "common"
                }
            }
        ]
    },
    {
        name: "multilevel-menu",
        meta: {
            title: "multilevel-menu",
            icon: "switch"
        },
        children: [
            {
                name: "second-menu",
                meta: {
                    title: "second-menu",
                    icon: "common"
                },
                children: [
                    {
                        name: "third-menu",
                        meta: {
                            title: "third-menu",
                            icon: "common"
                        }
                    }
                ]
            }
        ]
    }
]


function linearArray(nodes) {
    const result = [];
    while (nodes.length) {
        const next = nodes.pop();
        if (Array.isArray(next.children)) {
            nodes.push(...next.children);
        }
        result.push(next);
    }
    return result.reverse();
}

console.log(linearArray(tree))

基于 MIT 许可发布