Карта возврата JavaScript с ключом в виде пустой строки
-
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
.Затем оно снова продолжается, но поскольку нет .
в пути родительский путь ""
(пустая строка).
Поскольку все классы в конечном итоге добавляются в качестве дочерних элементов к узлу пустой строки, этот узел можно считать корневым узлом, как и возвращаемый узел.