Pregunta

En D3, el ejemplo de agrupación de bordes, tenemos 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[""];
}

No puedo entender qué return map[""]; medio.¿Algunas ideas?

¿Fue útil?

Solución

Para cada clase que se da, funciona recursivamente a través de los padres, llevando el nombre de la clase hasta el último ., agregando cada padre al mapa a medida que avanza, y finalmente agregando un padre con una cadena vacía para el nombre (no había ningún punto).

Este padre se considera la raíz y tiene una ruta de cadena vacía, y este nodo es lo que se devuelve.

Intentaré explicarlo mejor con un ejemplo;

Dada una clase con la ruta completa. Main.Sub.Class, el código agregará el Main.Sub.Class nodo al mapa con esa ruta, y luego intente encontrar/crear un nodo para Main.Sub, y se agrega como hijo a este nodo padre.

Si tiene que crear un nuevo nodo para Main.Sub, también intentará encontrar al padre de esta clase (Main), y añadir Main.Sub como un niño a Main.Luego continúa subiendo nuevamente, pero como no hay . en la ruta, la ruta principal es "" (cuerda vacía).

Dado que todas las clases eventualmente terminarán agregándose como hijos al nodo de cadena vacío, este nodo puede considerarse el nodo raíz, al igual que el nodo que se devolverá.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top