2015-04-04 189 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