D3.js - 获取节点的所有可能子元素

时间:2014-08-12 07:19:48

标签: javascript d3.js

我正在使用D3.js创建一个Tree结构。我正在开发的应用程序要求我展示直接的孩子和每个节点的子节点总数。我可以使用d.children.length找到直接的孩子,但是可以在节点下面获得总子元素(直到叶子)吗?如果是,我该怎么办?

1 个答案:

答案 0 :(得分:2)

您可以使用递归函数执行此操作,例如:

function getDescendants(node) {
    if(!node.children) {
        return 0;
    }
    var total = 0;
    node.children.forEach(function(d) {
        total += 1+getDescendants(d);
    }) 
    return total;
}

目标是遍历每个节点并计算它的下降(包括其自身)。

另一种方法是使用reduce函数来编写更少的代码。

function getDescendantsReduce(node) {
    if(!node.children) {
        return 0;
    }
    return node.children.reduce(function(c,d) {
        // c is the accumulator, we start with c=0 
        // d is the node of the array that gets computed 
        return c+1+getDescendants(b)
    },0)
}

http://jsfiddle.net/hFTN8/16/


修改

在“现代”javascript中,函数将是:

const getDescendantsReduce = (node) => node.children
  ? node.children.reduce( (c,b) => c+1+getDescendants(b), 0)
  : 0;