2012-10-16 28 views
4

我想保持我的節點在控制之下,使它們中的每一個都鏈接起來,並且沒有孤獨的節點。如何檢查沒有鏈接的節點的d3 js強制圖並刪除它們?

我的腳本從json查詢中每隔30秒添加一對新節點。如果任一新節點是現有節點的副本,則只會使用唯一節點更新該圖並將其鏈接到其他現有節點。

當這種情況發生時,我將移出最老的節點,以保持圖形上最多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(); 
        } 
       } 
+2

刪除未使用的節點,你應該只是做一個node.exit()在你的更新功能,檢查所有的初始化後,刪除()滿足在屏幕上保持節點的條件。在這種情況下很難說錯誤在哪裏,因爲您可能有添加/刪除節點在多個函數之間分離的邏輯,並且只顯示其中的一個....我想你應該只給一個分數或某物每個節點更可能留在屏幕上,然後通過分數> x或其他做一個簡單的過濾......這只是一個想法,這就是爲什麼我把它作爲評論而不是答案。 – paxRoman

回答

2

正如paxRoman建議,爲了刪除節點,你可以這樣做:

node.exit().remove(); 

現在,卻發現空無一人節點,你可以做的是使用武力節點的weight財產解釋在documentation of the force layout

權重 - 節點權重;關聯鏈接的數量。

所以,最後,爲了得到這都是空的所有節點都可以這樣做:。

force.nodes()過濾器(函數(d){d.weight == 0})

force是您的力量佈局。

也請注意,重量屬性將只能在force.start()調用如文檔中解釋初始化:

這些屬性不需要通過節點的佈局之前設置;如果沒有設置它們,適合默認值將被佈局時,開始被稱爲

相關問題