2016-03-11 49 views
0

我正在使用d3中的散點圖,並且圖上的點代表紙張。點被設置爲一個類型。我想談的點都是 In_library。 removeFromlibrary是一個在下拉菜單的選項中定義的函數。在此函數中,我連接到數據庫以更新庫中的布爾型假值。.splice方法不會在d3中刪除正確的數組項目

但我也想從我的數據數組中刪除這個項目。然後我想調用一個名爲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

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/splice。你正在使用'splice'錯誤。 – putvande

+0

@putvande關於如何正確使用它,並從數組中刪除正確的對象的任何意見?謝謝 –

+0

你需要你的元素在數組中的索引。你知道'allData'數組中'd'的索引嗎? – putvande

回答

1

根據評論,您對拼接的使用是錯誤的(參考:MDN) - 而不是輸入項目本身,您需要使用Array中的項目索引。

利用的Array.prototype.indexOf應該做的伎倆:

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