javascript - 无法在 javascript/Polymer 中调用我的递归函数

标签 javascript recursion polymer

我有一个搜索文件夹树并找到所选文件夹的父文件夹的功能。

这是函数。

        getParentFolder: function (searchroot, childFolder) {
            searchroot.subfolders.forEach(function (folder) {
                if (folder.key == childFolder.key) {
                    return searchroot;
                }
                else {
                    if (folder.subfolders) {
                        return this.getParentFolder(folder, childFolder);
                    }
                }
            });
        }

当我用 this.getParentFolder(rootFolder, childFolder); 调用它时

它只是给我:Uncaught TypeError: this.getParentFolder is not a function 为什么是这样?在同一个文件中,我调用其他函数,它们工作得很好。这是我无法调用的唯一函数。是因为递归吗?

最佳答案

当您在 forEach 方法中更改上下文时,您必须将 this 保存在一个变量中。

getParentFolder: function(searchroot, childFolder) {
  var self = this;
  searchroot.subfolders.forEach(function(folder) {
    if (folder.key == childFolder.key) {
      return searchroot;
    } else {
      if (folder.subfolders) {
        return self.getParentFolder(folder, childFolder);
      }
    }
  });
}

此外,return 语句不会按您希望的方式工作。我建议您使用 for 循环枚举数组:

getParentFolder: function(searchroot, childFolder) {
  for (var i = 0; i < searchroot.subfolders.length; i++) {
    var folder = searchroot.subfolders[i];
    if (folder.key == childFolder.key) {
      return searchroot;
    } else {
      if (folder.subfolders) {
        return self.getParentFolder(folder, childFolder);
      }
    }
  }
}

关于javascript - 无法在 javascript/Polymer 中调用我的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45717141/

相关文章:

javascript - AngularJS 计算 JSON 数组中 ID 等于的项目数

javascript - 如何在我的 js 文件之前运行 yii 表单验证

haskell - Haskell 中回溯的实现

python - python 中的简化扫雷递归 : why is this code not succeeding?

c - 尾递归 [C]

polymer - dom-repeater 中的两种方式数据绑定(bind)

javascript - Vis.js 时间轴出现 polymer 错误 : Something is wrong with the Timeline scale

javascript - Polymer - 核心动画页面中的内容标签不占用高度

javascript - 更新 .Net Codebehind 中的 javascript 变量

polymer - @ polymer/lit-element已弃用