我正在尝试递归循环访问具有子目录的目录中的许多文件,寻找要匹配的对象属性。
但是,似乎当我实际执行递归循环时,我无法获得预期的结果,并且由于某种原因,我似乎正在打印上次调试日志两次。
有人可以启发我出了什么问题吗?
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
调用:
- "主要"的:
recursiveLoop(data, 'new');
- "递归"的:
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);