mapa de retorno javascript com chave como string vazia
-
21-12-2019 - |
Pergunta
Em D3, o exemplo de empacotamento de borda, temos este código
// 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[""];
}
Eu não consigo descobrir o que return map[""];
significa.Alguma ideia?
Solução
Para cada classe dada, ele funciona recursivamente através dos pais, levando o nome da classe até o último .
, adicionando cada pai ao mapa à medida que avança, finalmente adicionando um pai com uma string vazia para o nome (não havia ponto).
Este pai é considerado a raiz e possui um caminho de string vazia, e este nó é o que é retornado.
Tentarei explicar melhor com um exemplo;
Dada uma classe com o caminho completo Main.Sub.Class
, o código adicionará o Main.Sub.Class
nó para o mapa com esse caminho e, em seguida, tente encontrar/criar um nó para Main.Sub
, e adicione-se como filho a esse nó pai.
Se for necessário criar um novo nó para Main.Sub
, ele tentará encontrar o pai desta classe também, (Main
), e adicione Main.Sub
como uma criança para Main
.Em seguida, continua novamente, mas como não há .
no caminho, o caminho pai é ""
(sequência vazia).
Como todas as classes acabarão se adicionando como filhos ao nó de string vazio, esse nó pode ser considerado o nó raiz, assim como o nó a ser retornado.