JavaScript Ritorna la mappa con il tasto come stringa vuota
-
21-12-2019 - |
Domanda
in d3, Esempio di bundling del bordo , abbiamo questo codice
// 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[""];
}
.
Non riesco a capire cosa significa return map[""];
.Qualche idea?
Soluzione
Per ogni classe è dato, funziona in modo ricorsivo attraverso i genitori, prendendo il nome della classe fino all'ultimo .
, aggiungendo ogni genitore sulla mappa come va, aggiungendo infine un genitore con stringa vuota per il nome (c'era No Dot).
Questo genitore è considerato come la radice e ha un percorso di stringa vuota, e questo nodo è ciò che viene restituito.
Proverò a spiegare meglio con un esempio;
Dato una classe con il percorso completo Main.Sub.Class
, il codice aggiungerà il nodo Main.Sub.Class
alla mappa con quel percorso, quindi provare a trovare / creare un nodo per Main.Sub
e aggiungerli da bambino a questo nodo genitore. < / P >.
Se deve creare un nuovo nodo per Main.Sub
, cercherà di trovare anche il genitore per questa classe (Main
) e aggiungere Main.Sub
come bambino a Main
. Quindi continua ancora, ma dal momento che non esiste .
nel percorso, il percorso principale è ""
(Stringa vuota).
Poiché tutte le classi finisseranno finiscono per aggiungere se stesse come figlio al nodo della stringa vuota, questo nodo può essere considerato il nodo root, e quindi il nodo da restituire.