I can't figure out how to explain this right, but I wanna make a function that takes this array:
const tasks = [
{id: 1, goal: 'Clean apartment', parent_id: null},
{id: 2, goal: 'Clean bathroom', parent_id: 1},
{id: 3, goal: 'Clean kitchen', parent_id: 1},
{id: 4, goal: 'Clean sink', parent_id: 2},
{id: 5, goal: 'Clean shower', parent_id: 2},
{id: 6, goal: 'Make app', parent_id: null}
]
and generates this object:
{id: 1, goal: 'Clean apartment', parent_id: null, children: [
{id: 2, goal: 'Clean bathroom', parent_id: 1, children: [
{id: 4, goal: 'Clean sink', parent_id: 2, children: []},
{id: 5, goal: 'Clean shower', parent_id: 2, children: []},
]},
{id: 3, goal: 'Clean kitchen', parent_id: 1, children: []},
]},
{id: 6, goal: 'Make app', parent_id: null, children: []}
Edit: So far I made this, but it only returns the first layer of the children:
function addChildren(tasks, id) {
var task = tasks.find(task => task.id === id)
var children = tasks.filter(task => task.parent_id === id)
task.children = children
return task
}
var newTask = addChildren(tasks, 1)
console.log(newTask)
EDIT 2: I tried making the function recursive, but I get an error saying "tasks.find is not a function".
function addChildren(tasks, id) {
var task = tasks.find(task => task.id === id)
var children = tasks.filter(task => task.parent_id === id)
task.children = children
task.children.forEach(child => {
addChildren(child, child.id)
})
return task
}
var newTask = addChildren(tasks, 1)
console.log(newTask)