如何检查没有链接的节点的d3 js强制图并删除它们?

时间:2012-10-16 22:10:08

标签: javascript layout graph d3.js force-layout

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

我的脚本每隔30秒从json查询添加一对新节点。如果任一新节点与现有节点重复,则仅使用唯一节点更新图形并将其链接到其他现有节点。

在这种情况下,我将关闭最旧的节点,以便在图表上保留最多10个节点。在这里,我似乎遇到了麻烦。如何删除节点并检查和删除任何未与任何其他节点链接的任何落后者?

该脚本基于on knoren's post on adding new nodes

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

1 个答案:

答案 0 :(得分:2)

根据paxRoman的建议,为了删除您可以执行的节点:

node.exit().remove();

现在,要查找空节点,您可以使用force节点的weight属性,如documentation of the force layout中所述:

  

重量 - 节点重量;相关链接的数量。

所以,最后,为了获得所有空的节点,你可以这样做:

force.nodes()。过滤器(功能(d){d.weight == 0})

force是你的力量布局。

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

  

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