'Deep nested Array of Objects, set parentId as property in subTask
I am trying to set the parentId as property of every subTask. I have a structure like this (For example), which can grow very big and deep:
[
{
"id": 0,
"lane": 0,
"name": "Task A",
"start": 0,
"end": 10000,
"subTasks": [
{
"id": "0.1",
"lane": 0,
"name": "Subtask",
"start": 0,
"end": 10000,
"class": "danger",
"sublane": 0,
"subTasks": [
{
"id": "0.1.1",
"name": "Subtask",
"start": 0,
"end": 10000,
"subTasks": [
{
"id": "0.1.1.1",
"name": "Subtask",
"start": 0,
"end": 10000,
"subTasks": [
{
"id": "0.1.1.1.1",
"name": "Subtask",
"start": 0,
"end": 10000
},
{
"id": "0.1.1.1.2",
"name": "Subtask",
"start": 0,
"end": 10000
}
]
},
{
"id": "0.1.1.2",
"name": "Subtask",
"start": 0,
"end": 10000
}
]
},
{
"id": "0.1.2",
"name": "Subtask",
"start": 0,
"end": 10000
},
{
"id": "0.1.3",
"name": "Subtask",
"start": 0,
"end": 10000
}
]
},
{
"id": "0.2",
"name": "Subtask",
"start": 0,
"end": 10000
}
],
"class": "danger",
"sublane": 0
},
{
"id": 1,
"lane": 2,
"name": "Task B",
"start": 15000,
"end": 25000,
],
"class": "success",
"sublane": 0
}
]
I tried this, but it didnt work:
addParentId: function () {
for (let obj of taskss.data) {
taskss.depthIteration(obj);
}
},
depthIteration: function (obj) {
if (obj.subTasks && obj.subCollapsed === false) {
for (let item of obj.subTasks) {
item.parentId = obj.id;
this.depthIteration(item);
}
}
return null;
},
Now I want this data not just to be returned flatten, every task which is a subTask should have a parentId property. For example, the subTask with "id": "0.1.1" should also have a "parentId": "0.1".
How can I do this?
Solution 1:[1]
const arr = [{
id: 0,
lane: 0,
name: 'Task A',
start: 0,
end: 10000,
subTasks: [{
id: '0.1',
lane: 0,
name: 'Subtask',
start: 0,
end: 10000,
class: 'danger',
sublane: 0,
subTasks: [{
id: '0.1.1',
name: 'Subtask',
start: 0,
end: 10000,
subTasks: [{
id: '0.1.1.1',
name: 'Subtask',
start: 0,
end: 10000,
subTasks: [{
id: '0.1.1.1.1',
name: 'Subtask',
start: 0,
end: 10000,
},
{
id: '0.1.1.1.2',
name: 'Subtask',
start: 0,
end: 10000,
},
],
},
{
id: '0.1.1.2',
name: 'Subtask',
start: 0,
end: 10000,
},
],
},
{
id: '0.1.2',
name: 'Subtask',
start: 0,
end: 10000,
},
{
id: '0.1.3',
name: 'Subtask',
start: 0,
end: 10000,
},
],
},
{
id: '0.2',
name: 'Subtask',
start: 0,
end: 10000,
},
],
class: 'danger',
sublane: 0,
},
{
id: 1,
lane: 2,
name: 'Task B',
start: 15000,
end: 25000,
class: 'success',
sublane: 0,
},
];
const addParentId = (arr) => {
arr.forEach((task) => {
if (task.subTasks) {
task.subTasks.forEach((subTask) => {
subTask.parentId = task.id;
if (subTask.subTasks) {
addParentId(subTask.subTasks);
}
});
}
});
return arr;
};
console.log(JSON.stringify(addParentId(arr), null, 2));
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Parvesh Kumar |
