2015-04-04 233 views
0

我想在JavaScript中刪除對象列表項:刪除對象從列表

$(document).ready(function() { 
    var eventObjs = []; 
    var idVal = 0; 
    $("#addItem").click(function() { 
     eventObjs.push([{ title: 'test', personId: idVal }]); 
     idVal += 1; 
    }); 

    $("#removeItem").click(function() { 
     idVal -= 1; 
     eventObjs = eventObjs 
      .filter(function (el) { 
      return el.personId !== (idVal - 1); 
     }); 
     $("#arrVal").html(eventObjs.length);  
    }); 
}); 

小提琴: http://jsfiddle.net/webdad3/51vbzne1/2/

我可以加我的元素就好了。但是,當我嘗試刪除它們。什麼都沒有我哪裏錯了?

我從代碼中得到了從數組中刪除項目的代碼。也許問題不是我在做什麼錯誤,但我需要做什麼才能從列表中刪除項目?

+0

*「但是,當我試圖刪除它們.. 。「* DOM元素或者'eventObj'數組中的條目? *「什麼都行不通,我哪裏出錯了?」*如果你正在討論DOM元素,告訴我們你試過的是什麼 - 上面沒有任何東西試圖去除DOM元素。 – 2015-04-04 14:29:49

回答

1

這是因爲您的過濾條件不正確。

這裏是正確的版本:http://jsfiddle.net/51vbzne1/3/

eventObjs = eventObjs.filter(function (el) { 
     return el.personId <= idVal; 
    }); 

說明:你應該過濾檢查每personId比當前idVal低。由於您在過濾之前正在執行idVal -= 1,因此您需要使用<=

或者如果你想刪除一個特定的項目。使用拼接,例如:eventObjs.splice(idVal, 1);

+0

可以說爲了參數,我不得不通過idVal。那麼你將如何改變它? – webdad3 2015-04-04 14:28:47

+0

如果是這樣。您應該使用拼接功能。 'eventObjs.splice(idVal,1);''''或'eventObjs.splice(idVal-1,1);' – Kursion 2015-04-04 14:30:52

+0

我以爲我讀到splice()不會在關聯數組上工作? – webdad3 2015-04-04 14:32:16

1
  1. eventObjs.push({ title: 'test', personId: idVal });更換eventObjs.push([{ title: 'test', personId: idVal }]);。現在,您有類似[[{title: 'test1'}], [{title: 'test2'}]],而不是[{title: 'test1'}, {title: 'test2'}]

  2. 更換return el.personId !== (idVal - 1);return el.personId !== idVal;

+1

使用過濾器刪除單個元素不是最佳解決方案:/。 – Kursion 2015-04-04 14:32:04

2

嘗試

$(document).ready(function() { 
    var eventObjs = []; 
    var idVal = 0; 
    $("#addItem").click(function() { 
     eventObjs.push([{ 
      title: 'test', personId: idVal 
     }]); 
     idVal += 1; 

     alert(eventObjs.length); 
    }); 

    $("#removeItem").click(function() { 
     eventObjs.splice(-1); 
     idVal = idVal -1; 
     alert(idVal); 
    }); 
}); 

的jsfiddle http://jsfiddle.net/51vbzne1/5/

+0

如果我傳入idVal,並且它不總是-1,就像我的示例中那樣?讓我們說這是中間元素? – webdad3 2015-04-04 14:34:21

+0

'eventObjs.splice(idVal,1);' – Kursion 2015-04-04 14:34:50

+0

這也是我的解決方案,你可以很容易地通過索引和拼接:) – Michelangelo 2015-04-04 14:36:46