删除对象从列表
我想在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/
我可以加我的元素就好了。但是,当我尝试删除它们。什么都没有我哪里错了?
我从代码中得到了从数组中删除项目的代码。也许问题不是我在做什么错误,但我需要做什么才能从列表中删除项目?
这是因为您的过滤条件不正确。
这里是正确的版本:http://jsfiddle.net/51vbzne1/3/
eventObjs = eventObjs.filter(function (el) {
return el.personId <= idVal;
});
说明:你应该过滤检查每personId
比当前idVal
低。由于您在过滤之前正在执行idVal -= 1
,因此您需要使用<=
。
或者如果你想删除一个特定的项目。使用拼接,例如:eventObjs.splice(idVal, 1);
与
eventObjs.push({ title: 'test', personId: idVal });
更换eventObjs.push([{ title: 'test', personId: idVal }]);
。现在,您有类似[[{title: 'test1'}], [{title: 'test2'}]]
,而不是[{title: 'test1'}, {title: 'test2'}]
更换
return el.personId !== (idVal - 1);
与return el.personId !== idVal;
使用过滤器删除单个元素不是最佳解决方案:/。 – Kursion 2015-04-04 14:32:04
尝试
$(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/
如果我传入idVal,并且它不总是-1,就像我的示例中那样?让我们说这是中间元素? – webdad3 2015-04-04 14:34:21
'eventObjs.splice(idVal,1);' – Kursion 2015-04-04 14:34:50
这也是我的解决方案,你可以很容易地通过索引和拼接:) – Michelangelo 2015-04-04 14:36:46
*“但是,当我试图删除它们.. 。“* DOM元素或者'eventObj'数组中的条目? *“什么都行不通,我哪里出错了?”*如果你正在讨论DOM元素,告诉我们你试过的是什么 - 上面没有任何东西试图去除DOM元素。 – 2015-04-04 14:29:49