JavaScript + 递归函数返回未定义 [英] JavaScript + recursive function returning undefined

查看:48
本文介绍了JavaScript + 递归函数返回未定义的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

HTML:

<div id="head"><span id="left"><</span><span id="right">></span>

脚本:

var h = hasId(container, 'head');var l = hasId(container, 'left');var r = hasId(container, 'right');console.log(h + " : " + r + " : " + l);//[object HTMLDivElement] : undefined : undefined函数 hasId(ele, id) {for (var i = 0; i 

解决方案

您只是递归调用中对 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函数 hasId(ele, id) {for (var i = 0; i 

I have a simple html structure that I need to traverse. For some reason my recursive function returns 'undefined' on any nested nodes, but not for parent nodes. Unfortunately this needs to be native js, no jQuery for this one. Thanks!

HTML:

<div id="container">
  <div id="head"> 
    <span id="left"><</span> 
    <span id="right">></span> 
  </div>
</div>

Script:

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);
    }
}

解决方案

You are simply the call to return on the recursive call. Also, you should test whether its result is defined. If yes, you can return it, or continue looping if not.

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;
        };
    }
}​

这篇关于JavaScript + 递归函数返回未定义的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆