Я создал интерактивное принудительно-направленное дерево связанных объектов с помощью d3. Узлы и связи создаются с использованием древовидной структуры d3.
Структура данных следующая:
{
"name": "node name",
"id": 1,
"children": [
{
"name": "child node name",
"id": 2
},
{
"name": "child node name",
"id": 3
},
...
]
},
...
Узлы / ссылки создаются следующим образом:
var nodes = flatten(rootNode);
var links = d3.layout.tree().links(nodes);
Чтобы включить двунаправленный обход дерева, я рекурсивно прохожу по дереву от каждого вновь созданного узла и добавляю родительские ссылки ко всем узлам.
Дерево можно расширить, щелкнув листовой узел. Затем данные загружаются через AJAX, и дерево обновляется.
Проблема заключается в том, что объекты с одним и тем же идентификатором / именем могут встречаться в дереве несколько раз. Есть ли способ чисто объединить все повторяющиеся узлы (которые преобразовали бы дерево в граф из-за перекрестных ссылок) из кода JavaScript?
Изменить. ..