2

在 D3,边缘捆绑示例中,我们有这段代码

// Lazily construct the package hierarchy from class names.
function packageHierarchy(classes) {
  var map = {};

  function find(name, data) {
    var node = map[name], i;
    if (!node) {
      node = map[name] = data || {name: name, children: []};
      if (name.length) {
        node.parent = find(name.substring(0, i = name.lastIndexOf(".")));
        node.parent.children.push(node);
        node.key = name.substring(i + 1);
      }
    }
    return node;
  }

  classes.forEach(function(d) {
    find(d.name, d);
  });

  return map[""];
}

我想不通是什么return map[""];意思。有任何想法吗?

4

1 回答 1

2

对于给定的每个类,它会通过父类递归地工作,将类名带到最后一个.,将每个父类添加到地图中,最后添加一个名称为空字符串的父类(没有点)。

以这个父节点为根,路径为空字符串,返回的就是这个节点。

我将尝试用一个例子更好地解释;

给定一个具有完整路径的类Main.Sub.Class,代码会将该Main.Sub.Class节点添加到具有该路径的地图中,然后尝试为 找到/创建一个节点Main.Sub,并将自身作为子节点添加到该父节点。

如果它必须为 创建一个新节点Main.Sub,它也会尝试为这个类找到父节点 ( Main),并将Main.Sub其作为子节点添加到Main. 然后它再次继续向上,但由于.路径中没有,所以父路径是""(空字符串)。

由于所有类最终都会将自己作为子节点添加到空字符串节点中,因此可以将该节点视为根节点,要返回的节点也是如此。

于 2014-06-03T14:17:53.373 回答