Карта возврата JavaScript с ключом в виде пустой строки

StackOverflow https://stackoverflow.com//questions/24016830

  •  21-12-2019
  •  | 
  •  

Вопрос

В 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[""]; означает.Есть идеи?

Это было полезно?

Решение

Для каждого заданного класса он работает рекурсивно через родителей, перенося имя класса до последнего. ., добавляя каждого родителя на карту по ходу дела, и, наконец, добавляя родительский элемент с пустой строкой для имени (точки не было).

Этот родительский элемент рассматривается как корень и имеет путь к пустой строке, а возвращается именно этот узел.

Я постараюсь объяснить лучше на примере;

Учитывая класс с полным путем Main.Sub.Class, код добавит Main.Sub.Class узел на карте с этим путем, а затем попытайтесь найти/создать узел для Main.Sub, и добавить себя в качестве дочернего узла к этому родительскому узлу.

Если ему необходимо создать новый узел для Main.Sub, он также попытается найти родителя для этого класса (Main), и добавить Main.Sub в детстве, чтобы Main.Затем оно снова продолжается, но поскольку нет . в пути родительский путь "" (пустая строка).

Поскольку все классы в конечном итоге добавляются в качестве дочерних элементов к узлу пустой строки, этот узел можно считать корневым узлом, как и возвращаемый узел.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top