JS 手写方法记录

210 阅读1分钟

手写数组转树

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}, 
]
function arrayToTree(array) {
        const root = array[0]
        array.shift()
        let tree = {
                id: root.id,
                val: root.val,
                children: toTree(root.id, array) // 利用递归方法
        }
        return tree
}
function toTree(parentId, arr) {
        const children = []
        let len = arr.length
        for (var i = 0; i < len; i++) {
                const node = arr[i]
                // 判断 每一项的 parentId 是否等于 传入的 parentId
                if (node.parentId === parentId) {
                        // 如果相等,向 children 里面 push 进去
                        children.push({
                                id: node.id,
                                val: node.val,
                                children: toTree(node.id, arr)
                        })
                }
        }
        return children
}
console.log(arrayToTree(input))