function listToTree(data) { let tree = []; let map = {}; data.forEach(node => { map[node.id] = { ...node, children: [] } }); for(let id in map) { let node = map[id]; if(node.parent_id === null) { tree.push(node); } else { if(!map[node.parent_id]) { map[node.parent_id] = { children: [] }; } map[node.parent_id].children.push(node); } } return tree; } let data = [ { "id": 1444, "name": "2023-073-B008", "parent_id": null }, { "id": 1445, "name": "2023-073-C008", "parent_id": 1444 }, { "id": 1446, "name": "2023-073-A006", "parent_id": 1444 } ]; let tree = buildTree(data); console.log(JSON.stringify(tree, null, 2));