JavaScriptは空の文字列としてキーでマップを返します
-
21-12-2019 - |
質問
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
(空の文字列)です。
すべてのクラスは、空の文字列ノードへの子として自分自身を子として追加することになるので、このノードはルートノードと見なすことができ、返されるノードです。
所属していません StackOverflow