Frage

In D3 wird der beispiel für Kantenbündelung, wir haben diesen 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[""];
}

Ich kann nicht herausfinden, was return map[""]; Mittel.Irgendwelche Ideen?

War es hilfreich?

Lösung

Für jede Klasse, die es gegeben hat, arbeitet es rekursiv durch die Eltern zurück und nimmt den Klassennamen bis zum letzten auf ., Fügen Sie der Karte jedes übergeordnete Element hinzu und fügen Sie schließlich ein übergeordnetes Element mit einer leeren Zeichenfolge für den Namen hinzu (es gab keinen Punkt).

Dieses übergeordnete Element wird als Stammverzeichnis betrachtet und hat einen Pfad mit einer leeren Zeichenfolge, und dieser Knoten wird zurückgegeben.

Ich werde versuchen, es mit einem Beispiel besser zu erklären;

Gegeben eine Klasse mit dem vollständigen Pfad Main.Sub.Class, der Code wird das hinzufügen Main.Sub.Class knoten zur Karte mit diesem Pfad und versuchen Sie dann, einen Knoten für zu finden / zu erstellen Main.Sub, und fügt sich selbst als Kind zu diesem übergeordneten Knoten hinzu.

Wenn es einen neuen Knoten für erstellen muss Main.Sub, es wird auch versuchen, das Elternteil für diese Klasse zu finden, (Main), und fügen Sie hinzu Main.Sub als Kind zu Main.Es geht dann wieder aufwärts, aber da gibt es keine . im Pfad lautet der übergeordnete Pfad "" (Leerstring).

Da sich schließlich alle Klassen als untergeordnetes Element zum leeren Zeichenfolgenknoten hinzufügen, kann dieser Knoten als Stammknoten betrachtet werden, ebenso wie der zurückzugebende Knoten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top