【发布时间】:2019-03-09 23:20:49
【问题描述】:
我有一个带有孩子的数据树结构:
{ id: 1,
name: "Dog",
parent_id: null,
children: [
{
id: 2,
name: "Food",
parent_id: 1,
children: []
},
{
id: 3,
name: "Water",
parent_id: 1,
children: [
{
id: 4,
name: "Bowl",
parent_id: 3,
children: []
},
{
id: 5,
name: "Oxygen",
parent_id: 3,
children: []
},
{
id: 6,
name: "Hydrogen",
parent_id: 3,
children: []
}
]
}
]
}
这表示一个 DOM 结构,用户可以通过单击 DOM 中的相应按钮从中选择要删除的项目。
我有一个已知的从 DOM 中删除的项目的文本标题设置为变量 clickedTitle。我无法找到允许我从深度嵌套树中删除正确对象数据的算法。
这是我的代码:
function askUserForDeleteConfirmation(e) {
const okToDelete = confirm( 'Are you sure you want to delete the item and all of its sub items?' );
if(!okToDelete) {
return;
}
const tree = getTree(); // returns the above data structure
const clickedTitle = getClickedTitle(e); // returns string title of clicked on item from DOM - for example "Dog" or "Bowl"
const updatedTree = removeFromTree(tree, tree, clickedTitle);
return updatedTree;
}
function removeFromTree(curNode, newTree, clickedTitle) {
if(curNode.name === clickedTitle) {
// this correctly finds the matched data item to delete but the next lines don't properly delete it... what to do?
const index = curNode.children.findIndex(child => child.name === clickedTitle);
newTree = curNode.children.slice(index, index + 1);
// TODO - what to do here?
}
for(const node of curNode.children) {
removeFromTree(node, newTree, clickedTitle);
}
return newTree;
}
我尝试使用来自Removing matched object from array of objects using javascript 的信息但没有成功。
【问题讨论】:
-
您能否提供一个示例案例中函数应用的期望结果?
-
同时检查
curNode.name === clickedTitle和child => child.name === clickedTitle对我来说没有意义。 -
没错,这就是为什么我要一个期望效果的例子
-
期望的结果是从原始树中删除该项目。
-
ggorlen 的回答没有任何问题。 Victor 的回答似乎确实有效,但应用程序无法正常工作,导致出现奇怪的行为。
标签: javascript arrays object