如何在角组件中的树中找到节点

时间:2019-05-22 13:46:45

标签: angular typescript recursion

我有一个树的对象

var data = [
{
 id: 'topNode',
 parameter: 'parameter',
 children: [
   {
       id: 'node1',
       parameter: 'parameter',
       children: [
       {
           id: 'randomNode_1',
           parameter: 'parameter'
       }],
   {   
       id: 'node2',
       parameter: 'parameter'
       children: [
           {
               id: 'randomNode_2',
               parameter: 'parameter'

           },
           {
               id: 'randomNode_3',
               parameter: 'parameter'

           }
       ]
   }
  ]
 }];

如何在树上搜索特定节点,然后返回该节点?

我写了一个方法:

    findProposedValueById(idToFind: string, rootNode: TreeNode): TreeNode {
        if (rootNode.getId() === idToFind) {
               return rootNode;
        } else {
              for (const child of rootNode.getChildren()) {
                   this.findProposedValueById(idToFind, child);
              }
        }
   }

我叫thid方法:

const draggedProposedValue: TreeNode = 
     this.findProposedValueById(event.currentTarget.id, this.proposedValues )

但是findProposedValueById方法始终返回未定义

但是,我在'return rootNode;'处设置了一个断点。

我现在就停下来,节点是好节点

编辑: 我调试了

  • 如果我返回通话方法
      for (const child of rootNode.getChildren()) {
                  return this.findProposedValueById(idToFind, child);
              }

事实上,他扫描到第一个分支(node1)的末端,并且当他完成操作时,他没有去到第二个分支(node2)

  • 如果我不返回通话方法
      for (const child of rootNode.getChildren()) {
                  this.findProposedValueById(idToFind, child);
              }

当他找到节点时,他没有停止并继续循环

1 个答案:

答案 0 :(得分:0)

您应将return放在for of块中的递归调用之前:

findProposedValueById(idToFind: string, rootNode: TreeNode): TreeNode {
        if (rootNode.getId() === idToFind) {
               return rootNode;
        } else {
              for (const child of rootNode.getChildren()) {
                   return this.findProposedValueById(idToFind, child);
              }
        }
   }