Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何修复我的递归函数?我正在接收一个数组或一个数据数组_Javascript_Arrays_Recursion - Fatal编程技术网

Javascript 如何修复我的递归函数?我正在接收一个数组或一个数据数组

Javascript 如何修复我的递归函数?我正在接收一个数组或一个数据数组,javascript,arrays,recursion,Javascript,Arrays,Recursion,我试图创建一个递归函数,它将遍历一个类似于带有子目录的目录的对象,并在数组中输出“file”对象。然而,似乎我得到的是一个数组数组,而不是一个简单的数组,其中包含我希望看到的对象 代码底部有一些console.log返回: console.log(findEntry(repAll, '/first')); // ===> [ { name: '/first' }, [] ] console.log(findEntry(repAll, '/second')); // ===> [ [

我试图创建一个递归函数,它将遍历一个类似于带有子目录的目录的对象,并在数组中输出“file”对象。然而,似乎我得到的是一个数组数组,而不是一个简单的数组,其中包含我希望看到的对象

代码底部有一些console.log返回:

console.log(findEntry(repAll, '/first')); // ===> [ { name: '/first' }, [] ]
console.log(findEntry(repAll, '/second')); // ===> [ [ { name: '/second' }, { name: '/second' } ] ]
const repAll={
文件1:{
名称:“/first”
},
子目录:{
文件2:{
名称:“/秒”
},
文件3:{
名称:“/秒”
}
} 
};
const req={};
函数findEntry(数据、名称){
设x=[];
for(对象的常量值。值(数据)){
//这是叶节点还是容器?
if(value.name){
//Leaf,如果匹配就退回
如果(value.name==name){
x、 推(值);
}
}否则{
//容器,递归地查看其内部
const entry=findEntry(值、名称);
x、 推动(进入);
}
}
返回x;
}
console.log('search:/first');
console.log(findEntry(repAll,“/first”);
console.log('search:/second');

日志(findEntry(repAll,/second')
您可以传播
findEntry
的结果,而不是简单地推送数组

const repAll={
文件1:{
名称:“/first”
},
子目录:{
文件2:{
名称:“/秒”
},
文件3:{
名称:“/秒”
}
} 
};
const req={};
函数findEntry(数据、名称){
设x=[];
for(对象的常量值。值(数据)){
//这是叶节点还是容器?
if(value.name){
//Leaf,如果匹配就退回
如果(value.name==name){
x、 推(值);
}
}否则{
//容器,递归地查看其内部
x、 push(…findEntry(值、名称));
}
}
返回x;
}
console.log('search:/first');
console.log(findEntry(repAll,“/first”);
console.log('search:/second');
日志(findEntry(repAll,/second')
function findEntry(data, name,x) {

    for (const value of Object.values(data)) {
        // Is this a leaf node or a container?
        if (value.name) {
            // Leaf, return it if it's a match
            if (value.name === name) {
                x.push(value);
            }
        } else {
            // Container, look inside it recursively
            const entry = findEntry(value, name,x);
            x.push(entry);
        }
    }
    return x;
}
现在这样称呼它:

let arr=[];
console.log(findEntry(repAll, '/first',arr));