js 树转数组

85 阅读1分钟

js书转数组

题目描述: 将下列树结结构转为数组

const obj = {
    id: 1,
    name: "部门1",
    pid: 0,
    children: [
        {
            id: 2,
            name: "部门2",
            pid: 1,
            children: []
        },
        {
            id: 3,
            name: "部门3",
            pid: 1,
            children: [
                {
                    id: 4,
                    name: "部门4",
                    pid: 3,
                    children: [
                        {
                            id: 5,
                            name: "部门5",
                            pid: 4,
                            children: []
                        }
                    ]
                }
            ]
        }
    ]
}

第一种实现方案

利用while 栈结构实现

function getNodeArray(obj) {
    let stack = []
    const res = [];
    stack.push(obj)
    while (stack.length) {
        const item = stack[0]
        res.push(item)
        stack.shift()
        if (item.children && item.children.length > 0) {
            stack.push(...item.children)
        }
        delete item.children
    }
    return res
}

第二种实现方案

循环递归实现

function getNodeArray(obj) {
   let array = obj instanceof *Array* ? obj : [obj]
   let res = []
   array.forEach(item => {
   res.push(item)
       if (item.children && item.children.length > 0) {
           let data = getNodeArray(item.children)
           res.push(...data)
       }
       delete item.children
   })
   return res
}