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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top