2016-03-07 107 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