Javascript在递归数组中查找值

Javascript在递归数组中查找值,javascript,recursion,Javascript,Recursion,为了在树对象中查找元素,我创建了一个函数。我的函数可以工作,但有时函数找不到值,并在查看所有树之前停止 我无法解释为什么它有时有效,有时无效 这是我的小提琴: 当你点击像“科学”这样的分类时,你可以看到它是有效的。但如果你点击“Bandes Dessinées”,它应该会显示“漫画”,但它不会 这是我的递归函数: function getChildrenFromCurrentFolder(tree, targetFolder) { console.log(tree); // Find recur

为了在树对象中查找元素,我创建了一个函数。我的函数可以工作,但有时函数找不到值,并在查看所有树之前停止

我无法解释为什么它有时有效,有时无效

这是我的小提琴:

当你点击像“科学”这样的分类时,你可以看到它是有效的。但如果你点击“Bandes Dessinées”,它应该会显示“漫画”,但它不会

这是我的递归函数:

function getChildrenFromCurrentFolder(tree, targetFolder) {
console.log(tree);
// Find recursivly all direct children of targeted folder
if (targetFolder == tree.id) {
   return tree.folders;
} else if (tree.folders.length > 0) {
   var folders = [];
   for (i = 0; folders.length == 0 && i < tree.folders.length; i++) {
      folders = getChildrenFromCurrentFolder(tree.folders[i], targetFolder);
   }
   return folders;
}
return [];

这是一个简单但常见的错误。您忘记声明循环变量,在创建被重用的全局变量时进行递归时会遇到麻烦:

function displayFolders() {
    ...
       for (var i = folders.length-1; i >= 0; i--)
    ...    --^--
}

function getChildrenFromCurrentFolder(tree, targetFolder) {
    ...
       for (var i = 0; folders.length == 0 && i < tree.folders.length; i++) {
    ...    --^--
}

function getBreadcrumb(tree, targetFolder, breadcrumb) {
    ...
    for (var i = 0; i < tree['folders'].length; i++)
    ... --^--
}
函数displayFolders(){
...
对于(var i=folders.length-1;i>=0;i--)
...    --^--
}
函数getChildrenFromCurrentFolder(树,目标文件夹){
...
对于(var i=0;folders.length==0&&i
我不确定所有其他逻辑是否正确,但这肯定会改变行为


绝对!非常感谢。:)有一些工具可以防止这些问题。尝试使用
“use strict”
,它会抛出一个错误。
function displayFolders() {
    ...
       for (var i = folders.length-1; i >= 0; i--)
    ...    --^--
}

function getChildrenFromCurrentFolder(tree, targetFolder) {
    ...
       for (var i = 0; folders.length == 0 && i < tree.folders.length; i++) {
    ...    --^--
}

function getBreadcrumb(tree, targetFolder, breadcrumb) {
    ...
    for (var i = 0; i < tree['folders'].length; i++)
    ... --^--
}