키가 빈 문자열인 자바스크립트 반환 맵
-
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[""];
수단.어떤 아이디어가 있나요?
해결책
주어진 각 클래스에 대해 부모를 통해 재귀적으로 작동하여 클래스 이름을 마지막까지 가져옵니다. .
, 지도에 각 부모를 추가하고 마지막으로 이름에 대한 빈 문자열(점이 없음)이 있는 부모를 추가합니다.
이 부모는 루트로 간주되며 빈 문자열의 경로를 가지며 이 노드가 반환됩니다.
예를 들어 더 잘 설명하겠습니다.
전체 경로가 포함된 클래스가 제공됩니다. Main.Sub.Class
, 코드는 Main.Sub.Class
해당 경로가 있는 맵에 노드를 추가한 다음 해당 노드에 대한 노드를 찾거나 생성하려고 시도합니다. Main.Sub
, 자신을 이 상위 노드의 하위 노드로 추가합니다.
새 노드를 생성해야 하는 경우 Main.Sub
, 이 클래스의 부모도 찾으려고 시도합니다. (Main
), 추가 Main.Sub
어렸을 때부터 Main
.그런 다음 다시 계속되지만 아무 것도 없기 때문에 .
경로에서 상위 경로는 다음과 같습니다. ""
(빈 문자열).
모든 클래스는 결국 자신을 빈 문자열 노드에 자식으로 추가하게 되므로 이 노드는 루트 노드로 간주될 수 있으며 반환될 노드도 마찬가지입니다.
제휴하지 않습니다 StackOverflow