我正在使用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的新手,所以任何帮助都表示赞赏!提前谢谢!
答案 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);
}