Tree 递归查找树中的所有子级

Tree 递归查找树中的所有子级,tree,d3.js,Tree,D3.js,我在D3中与树一起工作,到目前为止,这非常有趣。 如果用户单击内部节点(圆),我想 提供所有叶名称的列表 为从该节点到叶子的所有路径着色 下面是我为此编写的一些代码 var circles = nodeEnter.append("svg:circle") .attr("r", function(d){ return d.children ? 5 : 0; }) .on("click", get_all_children); function get_

我在D3中与树一起工作,到目前为止,这非常有趣。 如果用户单击内部节点(圆),我想

  • 提供所有叶名称的列表
  • 为从该节点到叶子的所有路径着色
下面是我为此编写的一些代码

   var circles = nodeEnter.append("svg:circle")
      .attr("r", function(d){ return d.children ? 5 : 0; })
      .on("click", get_all_children);


    function get_all_children(d){
         var all_children = get_all_childs(d);
             console.log("end, our array has: "+all_children.length+" elements");
            all_children.forEach(function(elem){
                console.log(elem.name);
        });
}

function get_all_childs(d, all_childs){
    var all_children = new Array;
    all_children.push(all_childs);

    if(d.children){
            var children = d.children;
            for (var i = 0; i < children.length; i++) {
                var temp_array = get_all_childs(children[i], all_children);
                console.log("got from recursion: : "+temp_array.length+" children");
                all_children.push(temp_array);
            }
    }
    else{
        //return all_children;
        //console.log("end, our array has: "+all_children.length+" elements");
    }
    return all_children;
}
var circles=nodeEnter.append(“svg:circle”)
.attr(“r”,函数(d){返回d.children?5:0;})
。点击(“点击”,获取所有儿童);
函数get_all_children(d){
var all_children=get_all_childs(d);
log(“结束,我们的数组有:“+all_children.length+”元素”);
所有子项。forEach(函数(elem){
控制台日志(元素名称);
});
}
函数get_all_childs(d,all_childs){
var all_children=新数组;
所有儿童。推(所有儿童);
如果(d.儿童){
var-children=d.children;
对于(变量i=0;i
看来我的递归没有正常工作。
你能帮我吗?

尝试移动var all\u children=新数组;超出get_all_childs()函数的作用域。由于该变量在每次调用该函数时都被重新声明为新数组,因此最终只能得到该函数最后一次调用的结果

然而,如果该变量存在于该函数的作用域之外,则当代码递归时,推送到该数组上的值将通过多次调用该函数而保持不变