array


let tree = [
    {
        label: '一级 1',
        pid: '0',
        id: '1',
        children: [{
            label: '二级 1-1',
            pid: '1',
            id: '2',
            children: [{
                label: '三级 1-1-1',
                pid: '2',
                id: '3',
            }]
        }]
    },
    {
        label: '一级 2',
        pid: '0',
        id: '4',
        children: [{
            label: '二级 2-1',
            pid: '4',
            id: '5',
            children: [{
                label: '三级 2-1-1',
                pid: '5',
                id: '6',
            }]
        }, {
            label: '二级 2-2',
            pid: '4',
            id: '7',
            children: [{
                label: '三级 2-2-1',
                pid: '7',
                id: '8',
            }]
        }]
    },
    {
        label: '一级 3',
        pid: '0',
        id: '9',
        children: [{
            label: '二级 3-1',
            pid: '9',
            id: '10',
            children: [{
                label: '三级 3-1-1',
                pid: '10',
                id: '11',
                type: '人员'
            }]
        }, {
            label: '二级 3-2',
            pid: '9',
            id: '12',
            children: [{
                pid: '12',
                id: '13',
                label: '三级 3-2-1'
            }]
        }]
    }
]


// let res = []

// function treeToArray(tree, array) {

//     if (Array.isArray(tree) && tree.length) {
//         tree.forEach(item => {
//             if (item.children && item.children.length) {
//                 treeToArray(item, array)
//             } else {
//                 array.push(item)
//             }
//         })
//     }
//     return array
// }
// let bb = treeToArray(tree, res)


function TreeToArray(tree) {
    // 判断 tree 是否有值,无返回 []
    if (!Array.isArray(tree) || !tree.length) return []
    let res = []
    tree.forEach(v => {
        // tree的每个元素都 放入到 res里面
        let obj = { ...v }
        delete obj.children
        res.push(obj)
        if (v.children) {
            // 有children 就把 children数据递归 返回  依次放到 res里面
            res.push(...TreeToArray(v.children))
        }
    })
    return res
}

let array = TreeToArray(tree)
let handle1 = array.filter(item => item.type === '人员')//
let handle2 = []
//重组 找到根
function handlefind(result) {
    if (!Array.isArray(result) || !result.length) return []
    let res = []
    result.forEach(v => {
        // tree的每个元素都 放入到 res里面
        res.push(v)

        if (v.pid && v.pid !== '0') {
            let parent = [array.find(item => item.id == v.pid)]
            res.push(...handlefind(parent))
        }
    })
    return res
}

let aaa = handlefind(handle1)



function ArrayToTree(arr, pid = 0) {
    // 判断 arr 是否是数组
    if (!Array.isArray(arr) || !arr.length) return []
    let newArr = []
    arr.forEach(v => {
        // 判断 pid 是否相同  相同就插入进去,切递归一下children,有值就继续递归,没值就返回[]
        if (v.pid == pid) {
            newArr.push({
                ...v, children: ArrayToTree(arr, v.id)
            })
        }
    })
    // 返回值
    return newArr
}
 
let newtree = ArrayToTree(aaa)
posted @   7c89  阅读(15)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示