手写数组转树
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))