2016-01-30 46 views
1

我正在玩圖表繪製13 g元素,每個元素都帶有一個圓圈。然後我在控制檯中執行以下操作。覈實給我副本包含13個元素,短小 7和longy 20.當然屏幕上沒有任何變化。D3 SVG圖表中的現有元素沒有更新 - 全部被視爲退出()和輸入()集合

var gees = d3.select("#graph2").selectAll("g"); 
var copy = gees.data(); 
var shorty = copy.slice(0,7) 
var longy = shorty.concat(copy); 

現在,我執行以下操作,我期望數據集中的差異,但不是我看到的方式。如果我們用13個元素和減6(與短小一樣),輸入()設置應該爲0,出口()設置應該是6,我的方式。但是,我的控制檯自豪地顯示它是7和13.同樣,如果我們從13個元素開始並添加7(如longy的情況),enter() set應該是7並且exit( )應該是0,據我所知。再一次,我的控制檯讓我驚訝,聲稱這是20和13

gees.data(shorty).enter() 
gees.data(shorty).exit() 

[數組[7]
[數組[13]

gees.data(longy).enter() 
gees.data(longy).exit() 

[陣列[012]]
[Array [13]]

我畫的結論是:所有的-exisint前元素被丟棄(因此放在退出()集)和添加的數據被視爲一個全新的一堆(因此被視爲進入()組)。我可以忍受,但我所讀過的文章指出,每一個和每個組運行應依靠:

  1. 更新的東西,在數據()
  2. 附加的東西回車()
  3. 出口(去除填充)
+0

@Fawzan的問題是*,爲什麼我會設置爲7和13的尺寸時,預計集大小爲0和6?*(第一個變化的較小的一組)。等同於另一種情況。在我看來,在非進入和非出口設置中沒有任何東西。 –

+0

@Fawzan他混淆了數組。我昨天偶然發現了[你的回答](http://stackoverflow.com/a/35101354/1675891)。這就是爲什麼我很快得到答案,所以你在那裏得到+1作爲信用。 –

回答

0

集合是正確的尺寸。你只是沒有看大小。你被控制檯的數據顯示欺騙了。運行這些命令應該可以消除混淆。我已經在圈子上完成了,但不是同樣的邏輯。

mySet.data(shorterSet).exit().size() 
mySet.data(shorterSet).enter().size() 
mySet.data(longerSet).exit().size() 
mySet.data(longerSet).enter().size()