我试图递归地遍历目录中带有子目录的多个文件,以寻找匹配的对象属性。
但是,当我实际执行递归循环时,似乎无法获得理想的结果,并且由于某种原因,似乎我两次打印了最后一个调试日志。
有人可以告诉我发生了什么事吗?
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']
这是其中的stackblitz
答案 0 :(得分:3)
有两个电话@ComponentScan({"com.ibm.*"})
@SpringBootApplication
public class SBApplication {
public static void main(String[] args) {
SpringApplication.run(SBApplication.class, args);
}
}
:
recursiveLoop
recursiveLoop(data, 'new');
(从日志输出中只能看到一次)由于有两次调用,并且只有一种从函数返回的方法,因此recursiveLoop(value, name);
被调用两次。
答案 1 :(得分:0)
定义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);