Javascript 从具有父子结构的对象数组中删除对象
嘿,我正在使用PrimingUI框架创建一个Angular应用程序,发现了一个我无法解决的问题 假设我有一个对象数组,其中的对象具有以下结构(仅供参考,这是树节点,它是数据下的树组件) 这是单个节点的外观:Javascript 从具有父子结构的对象数组中删除对象,javascript,angular,typescript,tree,primeng,Javascript,Angular,Typescript,Tree,Primeng,嘿,我正在使用PrimingUI框架创建一个Angular应用程序,发现了一个我无法解决的问题 假设我有一个对象数组,其中的对象具有以下结构(仅供参考,这是树节点,它是数据下的树组件) 这是单个节点的外观: { label?: string; expandedIcon?: any; collapsedIcon?: any; children?: TreeNode[]; parent?: TreeNode; id?: number; } 正如你所看
{
label?: string;
expandedIcon?: any;
collapsedIcon?: any;
children?: TreeNode[];
parent?: TreeNode;
id?: number;
}
正如你所看到的,这是一种父子关系
我的数组如下所示:
[
{ Id: 1,
label: "Books",
expandedIcon: "fa fa-folder-open",
collapsedIcon: "fa fa-folder",
children: [
{
Id: 2,
label: "Horror",
expandedIcon: "fa fa-folder-open",
collapsedIcon: "fa fa-folder",
children: [{
Id: 3,
label: "Stephen King",
expandedIcon: "fa fa-folder-open",
collapsedIcon: "fa fa-folder",
children: null,
parent: undefiend
}],
parent: {label: "Books", expandedIcon: "fa fa-folder-open"...}
}
];
parent: undefined;
},
{...}
]
现在我的问题来了:在我的应用程序中,用户可以选择这些对象中的一个,父对象或子对象(它看起来像Windows资源管理器结构)。如果选中,我想删除这个对象
我的问题是如何在数组中找到此选定对象
假设所选节点如下所示
{
label: "Stephen King",
expandedIcon: "fa fa-folder-open",
collapsedIcon: "fa fa-folder",
children: null,
parent: undefiend
}
如何在数组中找到此对象并将其删除?过滤器可以是标签或Id。您可以使用递归函数完成此操作
函数removeSelectedNode(){
p、 forEach((父项)=>{
deleteFromTree(父级,p)
})
}
函数deleteFromTree(对象,父对象){
console.log(“rechived”,obj)
if(obj.Id==selectedNode.Id){
console.log(“找到”,obj)
var index=parent.findIndex((o)=>o.Id==obj.Id)
母接头(索引1);
返回;
}
if(obj.children&&obj.children.length>0){
对象子对象forEach((子对象)=>{
deleteFromTree(child,obj.children);
})
}
}
层次结构中有多少层?理论上可以是无限的