質問

D3、エッジバンドリング例、このコード

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

return map[""];を意味するものを理解することはできません。任意のアイデア?

役に立ちましたか?

解決

各クラスの場合、それは最後の.までクラス名を取得し、それが行くようにマップに各親を追加して、両親を介して再帰的に機能します。ドットなし)。

この親はルートと見なされ、空の文字列のパスを持ち、このノードは返されるものです。

例でもっと良く説明しようとします;

フルパスGenerAcodeTagCodeを持つクラスを指定して、コードはそのパスを使用してMain.Sub.Classノードをマップに追加し、次にMain.Sub.Class用のノードを見つけて作成して、この親ノードへの子として自分自身を追加します。< / P>

Main.Sub用の新しいノードを作成する場合は、このクラスの親を見つけようとしています(Main.Sub)、ChildとしてMainを追加してください。その後、それは再び続きますが、パスにMain.Subがないため、親パスはMain(空の文字列)です。

すべてのクラスは、空の文字列ノードへの子として自分自身を子として追加することになるので、このノードはルートノードと見なすことができ、返されるノードです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top