.splice 方法未删除 d3 中数组中的正确项

.splice method not removing correct item in array in d3

本文关键字:数组 splice 删除 d3 方法      更新时间:2023-09-26

我正在使用d3中的散点图,图表上的点代表一篇论文。点设置为文字。我想说的点都是In_library型的。removeFromlibrary是一个在下拉菜单的选项中定义的函数。在此函数中,我连接到数据库以更新库中的布尔假值。

但我也想从我的数据数组中删除这个项目。然后我想调用一个名为 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 的新手,所以任何帮助不胜感激!提前感谢!

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

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

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