js递归遍历逻辑错误,帮忙看看是哪里写错了?

帮我看看哪有问题

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;
}
阅读 7.1k
3 个回答
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;
}

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题