Удалить объект из массива объектов со структурой родительский дочерний - PullRequest
0 голосов
/ 31 августа 2018

Привет, я создаю Angular Application, используя PrimeNg UI Framework, и обнаружил проблему, которую не могу решить.

Допустим, у меня есть Массив Объектов, где у Объектов есть следующая структура (Fyi, это TreeNode PrimeNg , это Древовидный компонент в разделе Data).

Вот так выглядит одиночный узел:

{
    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 Explorer). И если выбрано, я хочу удалить этот объект.

Мой вопрос: как мне найти этот выбранный объект в моем массиве?

Допустим, выбранный узел является следующим.

{
 label: "Stephen King",
 expandedIcon: "fa fa-folder-open",
 collapsedIcon: "fa fa-folder",
 children: null,
 parent: undefiend
}

Как я могу найти этот объект в моем массиве и удалить его? Фильтр может быть меткой или идентификатором.

1 Ответ

0 голосов
/ 31 августа 2018

Вы можете сделать это, используя рекурсивную функцию

    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 где-нибудь Я пытался запустить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...