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

标签 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[""]; 是什么意思。有什么想法吗?

最佳答案

对于给定的每个类,它通过父类递归返回,将类名取到最后一个 .,将每个父类添加到映射中,最后添加一个为空的父类名称的字符串(没有点)。

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

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

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

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

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

关于javascript返回映射,键为空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24016830/

相关文章:

javascript - 无法在 D3.js 代码中的服务器上加载 .csv 文件

Python:将元组列表转换为字典列表

javascript - 将鼠标悬停在切片上时更改 d3.js 饼图标签的颜色?

javascript - Colorbrewer 比例仅返回 D3 map 上的最亮值

javascript - 在 D3 捆绑布局中不断改变捆绑着色

javascript - 无法使用 ckeditor $_POST

javascript - 调用 .play() 会产生 "Uncaught (in promise) DOMException: The element has no supported sources."错误

javascript - D3.js - 检测交叉区域

javascript - 如何在没有数据库的情况下创建 AJAX 分页?