javascript - js递归遍历
天蓬老师
天蓬老师 2017-04-11 11:31:17
[JavaScript讨论组]

帮我看看哪有问题

var tree = {
    name: 'root',
    children: [{
        name: 'child1',
        children: [{
            name: 'child1_1',
            children: [{
                name: 'child1_1_1'
            }]
        }]
    }, {
        name: 'child2',
        children: [{
            name: 'child2_1'
        }]
    }, {
        name: 'child3'
    }]
};
function traverseTree(node) {
    var child = node.children, arr = [];
    if (child) {
        for (var i in child) {
            if (!child[i].children) {
                arr.push({ "name": child[i].name });
            } else {
                traverseTree(child[i]);
            }
        }
    }
    return arr;
}
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
PHP中文网
function traverseTree(node){
  var child = node.children,
      arr = [];

  arr.push({ name: node.name });
  if(child){
    child.forEach(function(node){
      arr = arr.concat(traverseTree(node));
    });
  }
  return arr;
}
ringa_lee

没什么问题呀,代码逻辑不就是把没有children的元素push到数组arr里边么?你每次递归的时候arr都会被重置,所以数组里只有一个child3。如果你问的是问什么只有一个元素的话,那你需要把arr生命在方法外部。

阿神

arr 数组是在 traverseTree 内部申明的,每次递归调用都会申明新的 arr = [],一般来说,应该在外面申明一个,通过函数传入吧(或者直接用全局的)

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号