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

问题描述 投票:0回答:1

嘿,我正在使用PrimeNg UI Framework创建一个Angular应用程序,并发现了一个我无法解决的问题。

假设我有一个对象数组,其中对象具有以下结构(Fyi这是PrimeNg的TreeNode,它是Data下的Tree Component)。

这是单个节点的样子:

{
    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。

javascript angular typescript tree primeng
1个回答
1
投票

您可以使用递归函数执行此操作

    function removeSelectedNode(){
      p.forEach((parent)=>{
        deleteFromTree(parent, p)
        })
    }

    function deleteFromTree(obj, parent){
     console.log("rechived", obj)
      if(obj.Id==selectedNode.Id){
      console.log("found", obj)
        var index = parent.findIndex((o)=> o.Id == obj.Id)
        parent.splice(index,1);
        return;
      }
      if(obj.children && obj.children.length>0){
        obj.children.forEach((child)=>{
           deleteFromTree(child, obj.children);    
        })         
      }
    }

在函数中用你的实际数组替换p并在我尝试运行它的地方设置selectedNode。

© www.soinside.com 2019 - 2024. All rights reserved.