2015-09-30 65 views
0

我有一個JavaScript數組,其中包含一些具有某些Id的對象和數組。我想要的是將數組中的對象與id數組進行比較,如果在對象中找到任何id,我想從數組中移除該元素。這樣做的結果顯示未定義的刪除元素。刪除JavaScript數組元素顯示未定義

var data = [{"name": "John_Smith","val":"3","id":"2"},{"name": "Peter_Adams","val":"2","id":"3"},{"name": "Priya_Shetye","val":"1","id":"4"},{"name": "Sara_Brown","val":"4","id":"5"}] 
var arr = ["2","5"]; 
for (var i = 0; i < data.length; i++) { 
    for(var j=0;j<arr.length;j++){ 
     if (arr[j]==data[i].id) { 
      delete data[i]; 
     } 
    } 
} 

結果顯示[undefined,object object,object object,undefined]。有沒有辦法只得到[object object,object object]

+0

您刪除的對象。但是,您尚未從陣列中刪除項目。根據@JeffMercado提供的文章,您需要刪除它,就像從數組中刪除項目一樣。 –

+0

嘗試'data = data.filter(布爾);'在刪除項目後。 –

回答

0
  1. 使用deletesplice代替
  2. 從長度1到0循環數組,否則你會錯過處理一些數據。
var data = [{"name": "John_Smith","val":"3","id":"2"},{"name": "Peter_Adams","val":"2","id":"3"},{"name": "Priya_Shetye","val":"1","id":"4"},{"name": "Sara_Brown","val":"4","id":"5"}]; 
var arr = ["2","5"]; 
for (var i = data.length-1; i >= 0; i--) { 
    for(var j = 0;j < arr.length;j++){ 
     if (arr[j]==data[i].id) { 
      data.splice(i,1); 
     } 
    } 
} 
console.log(data); 
+0

這不會起作用,因爲'splice'會改變數組的形狀。要測試這個,請嘗試一個測試用例,其中有兩個可刪除的條目緊挨着。第二個可刪除條目將被跳過並且不被刪除。 –

+0

這個程序會導致問題..就像i = 0有id那麼它會從它拼接,然後前面的1索引將在第0索引 –

+0

如果要拼接與數組中的多個索引,你必須拼接它從下降訂單像5,4,3 .... 1 –