为什么我的递归循环在最后打印最后一个值两次



我正在尝试递归循环访问具有子目录的目录中的许多文件,寻找要匹配的对象属性。

但是,似乎当我实际执行递归循环时,我无法获得预期的结果,并且由于某种原因,我似乎正在打印上次调试日志两次。

有人可以启发我出了什么问题吗?

 data = { myFile: { new: { name: 'new' } } }
  recursiveLoop(data, name) {
      let myArr = ['one'];
      console.log(1);
      for (const value of Object.values(data)) {
          console.log(2);
          if (value.name) {
              console.log(3);
              if (value.name === name) {
                  console.log(4);
                  myArr.push('value.name');
              }
          } else {
              console.log(5);
              recursiveLoop(value, name);
          }
      }
      console.log(6);
      return myArr;
  };
  x = recursiveLoop(data, 'new');
  console.log(x);

调试控制台日志显示:

1
2
5
1
2
3
4
6
6

最后打印的数组是空的...

我无法弄清楚出了什么问题:-(

我的目标是有一个数组:['new']

这是一个堆叠闪电战,里面有它

有两个recursiveLoop调用:

  1. "主要"的:recursiveLoop(data, 'new');
  2. "递归"的:recursiveLoop(value, name);(从日志输出中可以看到,仅调用一次(

由于有两个调用,并且只有一种方法可以从函数返回,因此console.log(6);被调用两次。

定义recursiveLoop(data, name, depth)(你需要第三个参数(,调用它为

x = recursiveLoop(data, 'new', 0);

首先,然后总是通过调用来增加它

recursiveLoop(value, name, depth + 1);

您将始终知道这是否是第一个电话。然后将运行两次的行更改为

if (!depth) console.log(6);

所以它只会在第一次运行。您的另一个错误是将value.name作为字符串添加到数组中,而不是作为值,因此请更改此行

myArr.push('value.name');

myArr.push(value.name);

最新更新