2016-03-07 63 views
0

我正在使用d3散點圖,當我右鍵單擊某個點時,會出現一個下拉菜單菜單。當我點擊一個選項(稱爲「從庫中移除」)時,我想從數組(庫數據)中刪除選定的項目/點。我是新來的D3,所以對我來說有意義的只是如何從d3列表中刪除選定的項目

libraryData.remove(d); 

我知道這不是一個函數。我發現了類似array.splice()函數。但是當我不知道我想要在數組中移除的項目的位置時,我無法弄清楚如何應用該方法。 這是我的菜單選項中定義我的功能:

{ 
title: 'Remove from Library', 
action: function (elem, d, i) { 

     d3.json("connection6.php?paperID="+d.ID, function(error, dataJson) { 

      libraryData.?????(); 
       console.log(libraryData); 
     }) 
    } 

任何幫助表示讚賞,因爲你可以告訴我是新來D3!

+0

你在網上的任何地方搜索過嗎? – thatOneGuy

回答

1

你是在正確的軌道上與remove(d)

您可以使用此:

d3.select(selectedElement).remove(); 

於是想,如果你想刪除與「大象」 ID的元素下面的例子就會像這樣:

nodes.each(function(d){ 
    if(d.id ==='elephant'){ 
    d3.select(this).remove(); 
    } 
} 

也就是說,如果你在數據集中有ID。您可以在此檢查中使用任何內容。

或者更簡單,如果你知道ID是大象那就是:

d3.select('#elephant').remove(); 

或者說你有一組數據,你只是拼接你的陣列的正確索引。

例如:

說你有一些數據,並要與「大象」的ID刪除數據;

遍歷並用id=elephant

for(i=0;i<data.length;i++){ 
    if(data[i].id === 'elephant'){ 
    data.splice(i--,1); 
    } 
} 

通知我使用i--移除元件。這是爲了更新數組,否則如果你想刪除多個元素,你將得到錯誤的索引。

然後,一旦你拼接它只是更新你的可視化。

+0

好的我明白了,對於您在那裏展示的第一個示例,您在哪裏告訴d3從中刪除元素?在我的情況下,我想從中刪除元素的列表是libraryData .. @thisOneGuy –

+0

已更新的回答。 – thatOneGuy

+0

如果你重新創建你的應用程序,例如,JSFiddle,那麼我可以告訴你如何實現 – thatOneGuy