Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.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 - Fatal编程技术网

Javascript递归函数返回未定义的

Javascript递归函数返回未定义的,javascript,Javascript,我有一个奇怪的问题,对我来说毫无意义。我错过了什么 class AreaManager { constructor() { this.areas = []; this.areas.push(new Area('Area1', this)); this.areas[0].areas.push(new Area('AreaABC', this.areas[0])); this.areas[0].areas[0].area

我有一个奇怪的问题,对我来说毫无意义。我错过了什么

class AreaManager
{
    constructor()
    {
        this.areas = [];
        this.areas.push(new Area('Area1', this));
        this.areas[0].areas.push(new Area('AreaABC', this.areas[0]));
        this.areas[0].areas[0].areas.push(new Area('AreaABC123', this.areas[0].areas[0]));
        this.areas[0].areas.push(new Area('AreaDEF', this.areas[0]));
    }

    findAreaById(id, areas)
    {
        areas.forEach(a => {
            if(a.id == id)
                return a; //console.log()  prints the right Area object here
            else
                return this.findAreaById(id, a.areas);
        });
    }
}
class Area
{
    constructor(id, parent)
    {
        this.id = id;
        this.areas = [];
    }
}


var _Manager;

function InitManager()
{
    _Manager = new AreaManager();
}

function GetSomeArea()
{
    var searchID = 'AreaDEF';
    var areaObject = _Manager.findAreaById(searchID);
    console.log(areaObject); //this is always undefined
}
我不确定这里有什么问题。即使我试图在
中返回一个简单的字符串或数字,如果(a.id==id)
我也没有定义

希望有人能解释一下。谢谢

区域。forEach(a=>{
lambda函数返回
。它不是从父函数返回。使用basic for循环来中断循环

有关更多信息,请阅读我的博客:

class区域管理器{
构造函数(){
此参数为:面积=[];
本.区.推(新区(“1区”,本));
this.areas[0].areas.push(新区域(“AreaABC”,this.areas[0]);
此.areas[0]。areas[0]。areas.push(
新区域(“AreaABC123”,此.areas[0]。areas[0])
);
this.areas[0].areas.push(新区域(“AreaDEF”,this.areas[0]);
}
findAreaById(id,areas=this.areas){
让合并=[];
for(设i=0;iGetSomeArea();
您正在从传递给
forEach()的函数中返回
,不是从你的主函数,那么我该怎么办呢?我习惯了c#。返回foreach?而且你没有传递任何
区域
,所以我希望
类型错误:无法读取未定义的
的属性'foreach'。好的foreach不能被破坏。我将我的函数更新为:`findAreaById(id,areads){for(let i=0;i