编辑代码


// 例如将 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: 2
    }, {
        id: 6, val: '学生3', parentId: 3
    },
]

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

function arrayToTree(array) {
    let tree = {
        id: array[0].id,
        val: array[0].value,
        children: array.length > 0 ? toTree(array[0].id, array) : []
    }
    return tree
}
function toTree(parentId, array) {
    let children = []
    for (i = 1; i < array.length; i++) {
        if (array[i].parentId == parentId) {
            children.push({
                id: array[i].id,
                val: array[i].val,
                children: toTree(array[i].id, array)
            })
        }
    }
    return children
}

console.log(arrayToTree(input))