JavaScript +递归函数返回undefined

wor*_*ked 3 javascript recursion

我有一个简单的html结构,我需要遍历.由于某种原因,我的递归函数在任何嵌套节点上返回'undefined',但不对父节点返回.不幸的是,这需要是原生的js,没有jQuery.谢谢!

HTML:

<div id="container">
  <div id="head"> 
    <span id="left"><</span> 
    <span id="right">></span> 
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

脚本:

var h = hasId(container, 'head');
var l = hasId(container, 'left');
var r = hasId(container, 'right');

console.log(h + " : " + r + " : " + l);
//[object HTMLDivElement] : undefined : undefined

function hasId(ele, id) {
    for (var i = 0; i < ele.childNodes.length; i++) {
        var child = ele.childNodes[i];
        if(child.id == id) return child;
        else hasId(child, id);
    }
}
Run Code Online (Sandbox Code Playgroud)

Pie*_*rre 14

你只是return对递归调用的调用.此外,您应该测试其结果是否已定义.如果是,您可以返回它,或者如果没有则继续循环.

var h = hasId(container, 'head');
var l = hasId(container, 'left');
var r = hasId(container, 'right');

console.log(h + " : " + r + " : " + l);
//[object HTMLDivElement] : undefined : undefined

function hasId(ele, id) {
    for (var i = 0; i < ele.childNodes.length; i++) {
        var child = ele.childNodes[i];
        if(child.id == id) return child;
        else {
          var next = hasId(child, id);
          if(next) return next;
        };
    }
}?
Run Code Online (Sandbox Code Playgroud)

  • 您的代码是正确的,但是您修复了一个更微妙的错误,但没有解释原因。正如我最初回答的那样,这并不是_只是_缺少“返回”,而是事实上,如果递归的结果本身已定义,则该返回_仅_会发生。 (2认同)

Aln*_*tak 6

else子句应该return是值hasId(child, id),但仅当该值本身被定义时,否则它必须继续循环.

如果没有return这个功能会递归,但不会给出答案.