javascript返回映射,键为空字符串

时间:2014-06-03 13:44:58

标签: javascript d3.js bundle-layout

在D3 edge bundling example中,我们有这段代码

// 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[""];的含义。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

对于它给出的每个类,它以递归方式返回父母,将类名称提取到最后.,将每个父项添加到地图中,最后添加父项名称的空字符串(没有点)。

此父级被视为根,并且具有空字符串的路径,并且此节点是返回的。

我试着通过一个例子更好地解释一下;

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

如果必须为Main.Sub创建新节点,它还会尝试查找此类的父节点(Main),并将Main.Sub作为子节点添加到{ {1}}。然后它再次继续,但由于路径中没有Main,因此父路径为.(空字符串)。

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