const treeArr = [
{id: 1, name: 'A', parentId: null},
{id: 2, name: 'B', parentId: 1},
{id: 3, name: 'C', parentId: 1},
{id: 4, name: 'D', parentId: 2},
{id: 5, name: 'E', parentId: 2},
{id: 6, name: 'F', parentId: 3},
{id: 7, name: 'G', parentId: 3},
{id: 8, name: 'H', parentId: 4},
]
function toTree(nodes){
const map = {}
const tree = []
nodes.forEach(node=>{
map[node.id] = node
node.children = []
})
nodes.forEach(node=>{
if(node.parentId) {
map[node.parentId].children.push(node)
}else {
tree.push(node)
}
})
console.log(JSON.stringify(tree))
return tree
}
toTree(treeArr)