[英]Deep nested Array of Objects, find and remove Object with specific ID
我正在尝试通过 ID 查找 Object 并将其删除。 (当然,如果这个 object 有子任务,那么挂在这棵树上的所有对象也会被删除)。 我有一个这样的结构(例如),它可以变得非常大和深:
[
{
"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
}
]
现在我想删除 ID = 0.1.1.1.1 例如,但它应该以同样的方式与其他所有 Object 一起工作,无论它嵌套多深。
使用此 dfs 算法查找和编辑 Im:
edit: function (name, start, end) {
for (let obj of gantt.items()) {
result = dfs(obj, id);
if (result) {
result.name = name;
result.start = start;
result.end = end;
}
}
dfs: function (obj, targetId) {
if (obj.id === targetId) {
return obj;
}
if (obj.subTasks) {
for (let item of obj.subTasks) {
let check = dfs(item, targetId);
if (check) {
return check;
}
}
}
return null;
},
但是如何删除/删除特定的 Object?
递归过滤器的种类:
const data = [{"id":"0","lane":0,"name":"Task A","start":0,"end":10000,"Subtask":[{"id":"0.1","lane":0,"name":"Subtask","start":0,"end":10000,"class":"danger","sublane":0,"Subtask":[{"id":"0.1.1","name":"Subtask","start":0,"end":10000,"Subtask":[{"id":"0.1.1.1","name":"Subtask","start":0,"end":10000,"Subtask":[{"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 removeById = (arr, targetId) => arr.reduce((acc, obj) => (obj.id === targetId)? acc: [...acc, {...obj, ...(obj.Subtask && { Subtask: removeById(obj.Subtask, targetId) }) } ], []); console.log(removeById(data, "0.1"));
.as-console-wrapper{min-height: 100%;important: top: 0}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.