我试图在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 :(得分: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/
答案 1 :(得分:1)
这是因为您的过滤条件错误。
这是正确的版本:http://jsfiddle.net/51vbzne1/3/
eventObjs = eventObjs.filter(function (el) {
return el.personId <= idVal;
});
解释:您应过滤以检查每个personId
是否低于当前idVal
。由于您在过滤之前正在执行idVal -= 1
,因此您需要使用<=
。
或者,如果您要删除特定项目。使用拼接,例如:eventObjs.splice(idVal, 1);
答案 2 :(得分: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;