Javascript 从具有父子结构的对象数组中删除对象

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; } 正如你所看

嘿,我正在使用PrimingUI框架创建一个Angular应用程序,发现了一个我无法解决的问题

假设我有一个对象数组,其中的对象具有以下结构(仅供参考,这是树节点,它是数据下的树组件)

这是单个节点的外观:

{
    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);
})         
}

}
层次结构中有多少层?理论上可以是无限的