const arr = [
{ id: 1, parent_id: null },
{ id: 2, parent_id: 1 },
{ id: 3, parent_id: 1 },
{ id: 4, parent_id: 2 },
{ id: 5, parent_id: 4 },
]
const data = arr2Tree(arr)
console.log(data)
// function arr2Tree(arr) {
// let res = []
// let obj ={}
// arr.forEach(item => obj[item.id] = item)
// arr.forEach(item => {
// const parent = obj[item['parent_id']]
// if (parent) {
// (parent.children || (parent.children = [])).push(item)
// } else {
// res.push(item)
// }
// })
// return res
// }
function arr2Tree(arr, id = null, parentName = 'parent_id') {
return arr.filter(item => item[parentName] === id).map(item => ({...item,children: arr2Tree(arr,item.id)}))
}