Question

En D3, le exemple de regroupement de périphérie, nous avons ce code

// 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[""];
}

Je n'arrive pas à comprendre quoi return map[""]; moyens.Des idées?

Était-ce utile?

La solution

Pour chaque classe donnée, cela fonctionne de manière récursive à travers les parents, en remontant le nom de la classe jusqu'au dernier. ., en ajoutant chaque parent à la carte au fur et à mesure, en ajoutant enfin un parent avec une chaîne vide pour le nom (il n'y avait pas de point).

Ce parent est considéré comme la racine et a un chemin de chaîne vide, et ce nœud est ce qui est renvoyé.

Je vais essayer de mieux expliquer avec un exemple ;

Étant donné une classe avec le chemin complet Main.Sub.Class, le code ajoutera le Main.Sub.Class nœud à la carte avec ce chemin, puis essayez de trouver/créer un nœud pour Main.Sub, et s'ajoute en tant qu'enfant à ce nœud parent.

S'il doit créer un nouveau nœud pour Main.Sub, il essaiera également de trouver le parent de cette classe (Main), et ajouter Main.Sub en tant qu'enfant à Main.Cela continue ensuite, mais comme il n'y a pas . dans le chemin, le chemin parent est "" (chaîne vide).

Étant donné que toutes les classes finiront par s'ajouter en tant qu'enfant au nœud de chaîne vide, ce nœud peut être considéré comme le nœud racine, tout comme le nœud à renvoyer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top