5

我想控制我的节点,以便每个节点都是链接的,并且没有孤立的节点。

我的脚本每 30 秒从 json 查询中添加一对新节点。如果任一新节点是现有节点的副本,则图将仅使用唯一节点更新并将其链接到另一个现有节点。

在此过程中,我将移除最旧的节点以在图表上最多保留 10 个节点。正是在这里,我似乎遇到了麻烦。我怎样才能开始删除节点并检查并删除任何落后者,即未链接到任何其他节点的节点?

该脚本基于knoren 关于添加新节点的帖子

                this.checkLength = function () {
                    if (nodes.length > 10) {
                        var i = links.shift();
                        nodes.splice(findNodeIndex(i),1);
                        update();
                    }
                } 
4

1 回答 1

2

正如 paxRoman 所建议的,为了删除节点,您可以执行以下操作:

node.exit().remove();

现在,要查找空节点,您可以使用weightforce 节点的属性,如force layout 文档中所述

weight - 节点权重;关联链接的数量。

因此,最后,为了获得所有空的节点,您可以执行以下操作:

force.nodes().filter(函数(d){d.weight==0})

成为你的force力量布局。

另请注意,权重属性只会在force.start()调用时初始化,如文档中所述:

在将节点传递给布局之前不需要设置这些属性;如果未设置,则在调用 start 时布局将初始化合适的默认值

于 2014-02-26T10:08:56.310 回答