Javascript d3.js-确定嵌套深度(或子对象的子对象)

Javascript d3.js-确定嵌套深度(或子对象的子对象),javascript,svg,d3.js,nested,depth,Javascript,Svg,D3.js,Nested,Depth,我有一个数据可视化,它当前根据对象是否有子对象为对象提供一个类,如下所示: d3.json("skills.json", function(error, root) { var node = svg.datum(root).selectAll(".node") .data(pack.nodes) .enter().append("g") .attr("class", function(d) { return d.children ? "node" : "leaf no

我有一个数据可视化,它当前根据对象是否有子对象为对象提供一个类,如下所示:

d3.json("skills.json", function(error, root) {
  var node = svg.datum(root).selectAll(".node")
    .data(pack.nodes)
    .enter().append("g")
    .attr("class", function(d) { return d.children ? "node" : "leaf node"; })
我想做的是根据他们的深度给他们一个不同的类,或者至少根据他们是否有孩子的孩子,基本上是这样的(尽管我不确定语法):

有人知道这样做的正确方法吗?

您可以使用它来查看当前节点的任何子节点是否有子节点

node.attr("class", function(d) {
  return d.children ? (d.children.some(function(c) { return c.children; })
      ? "grandparent" 
      : "parent")
      : "child";
});

D3.js API包含一个未记录的方法
d.depth
,该方法从根节点跟踪节点的深度

node.attr("class", function(d) {
  return d.children ? (d.children.some(function(c) { return c.children; })
      ? "grandparent" 
      : "parent")
      : "child";
});