数组转树

将input数据格式转换为output数据格式

let input =  [{
    id: 1, val: '学校',  parentId: null
},{
    id: 2, val: '班级1', parentId: 1
},{
    id: 3, val: '班级2', parentId: 1
},{
    id: 4, val: '学生1', parentId: 2
},{
    id: 5, val: '学生2', parentId: 3
},{
    id: 6, val: '学生3', parentId: 3
}]

let output = {
    id: 1,
    val: '学校',
    children: [{
        id: 2,
        val: '班级1',
        children: [
            {
                id: 4,
                val: '学生1',
                children: null
            }
        ]
    }, {
        id: 3,
        val: '班级2',
        children: [
            {
                id: 5,
                val: '学生2',
                children: null
            },{
                id: 6,
                val: '学生3',
                children: null
            }
        ]
    }]
}

实现方式

const arrayToTree = (metadata) => {
    const {id, val} = metadata.find(item => !item.parentId)
    const tree = {
        id, val
    }
    const transform = (id, metadata) => {
        let children = []
        for(let i = 0; i < metadata.length; i++){
            let item = metadata[i]
            if(id === item.parentId){
                let result = 
                children.push({
                    id: item.id,
                    val: item.val,
                    children: transform(item.id, metadata) 
                })
            }
        }
        return children.length ? children : null
    }
    tree.children = transform(id, metadata)
    return tree
}

  

  

posted @ 2020-07-23 16:41  671_MrSix  阅读(131)  评论(0编辑  收藏  举报