.splice方法没有在d3中删除数组中的正确项

时间:2016-03-11 19:44:35

标签: javascript arrays d3.js

我正在使用d3中的散点图,图中的点代表纸张。点设置为一种类型。我想谈的点都是 In_library 类型。 removeFromlibrary是一个在下拉菜单中的选项中定义的函数。在此函数中,我建立了与数据库的连接,以更新库中的布尔值false。

但我也想从我的数据数组中删除这个项目。然后我想调用一个名为refreshGraph()的函数,它清除图形并使用更新的数组重绘点。我试图从数组中删除此项(因此一旦调用了refreshGraph函数将其从显示中删除)的方法是执行以下操作:

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

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

        if (d.type === "In_library") {
            allData.splice(d, 1);
        }

        refreshGraph();

        })          
    }

因此,如果我选择的点是 In_library 类型(它是),我想从数组中删除那个项目。 这不起作用,当我选择一个点并选择菜单中的从库中删除选项时,它将删除具有类型" In_library"的不同纸张。可能的原因是.splice方法的索引是错误的。?

我是d3的新手,所以任何帮助都表示赞赏!提前谢谢!

1 个答案:

答案 0 :(得分:1)

根据评论,您对拼接的使用是错误的(参考:MDN) - 而不是输入项本身,您需要在数组中使用项目索引。

利用Array.prototype.indexOf应该可以解决问题:

if (d.type === "In_library") {
  var index_d = allData.indexOf(d);
  if (index_d != -1) allData.splice(index_d, 1);
}