【问题标题】:Recursion does not work properly递归无法正常工作
【发布时间】:2016-06-16 11:36:00
【问题描述】:

我在使用从一些 XML 数据创建 TreeView(使用 MetroUI)的递归函数时遇到了一些问题。在第一个范围内,树的第一层按预期创建,但第二个未创建。我的 XML 数据具有以下结构:

<tree>
  <sitenode>
    <name>First Element</name>
    <children>
      <sitenode>
        ...
      </sitenode>
    </children>
  </sitenode>
</tree>

我使用的 JavaScript 代码是这个:

var tree = $('#dlgEditorCreateNewSiteSelParent').data('treeview');

/* Helper-function for Recursion */
function dlgEditorCreateNewSiteCreateParentTreeViewNodes(nodes, parent) {
  var i, j;
  /* Alle knoten durchlaudfen */
  for (i = 0; i < nodes.length; i++) {

    /* Add leaf */
    var node = tree.addLeaf(parent, $(nodes[i]).find('>name').text());

    /* Children */
    var children = $(nodes[i]).find('children > sitenode');

    for (j = 0; j < children.length; j++) {
      /* REKURSION */
      //alert('childre child nr. '+j+' with name '+$(children[j]).find('> name').text());
      dlgEditorCreateNewSiteCreateParentTreeViewNodes(children[j], node);
    }
  }
}

var roots = $(result).find('tree > sitenode');
dlgEditorCreateNewSiteCreateParentTreeViewNodes(roots, false);
通过使用 Firefox 调试代码,似乎第一个处理范围功能正常,但在第二个处理范围内(因此通过处理子级),调试器立即跳转(在递归调用函数后)进入第二个 for-循环,我的大部分变量都是“未定义的”。

我已经搜索了一些类似的问题,但我发现的都是关于反变量范围的。

【问题讨论】:

    标签: javascript recursion tree treeview metro-ui-css


    【解决方案1】:
      for (j = 0; j < children.length; j++) {
      /* REKURSION */
      //alert('childre child nr. '+j+' with name '+$(children[j]).find('> name').text());
      dlgEditorCreateNewSiteCreateParentTreeViewNodes(children[j], node);
    }
    

    这应该可以,不过我不确定..

    children.forEach(function(child) {
        dlgEditorCreateNewSiteCreateParentTreeViewNodes(child, this);
    }, node);
    

    【讨论】:

    • 谢谢,但这不起作用。但是我找到了另一种通过将完整数组传递给递归来解决问题的方法。最近几天我有点不知所措(你用英语是这样说的吗?)
    猜你喜欢
    • 2022-01-19
    • 2015-11-11
    • 1970-01-01
    • 2019-04-04
    • 2023-03-22
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    相关资源
    最近更新 更多