从列表中删除对象

时间:2015-04-04 14:20:09

标签: javascript jquery

我试图在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/

我可以添加我的元素。但是当我试图删除它们时。什么都行不通。我哪里错了?

我从代码中获取了从数组中删除项目的代码。也许问题不在于我上面做错了什么,但是我需要做些什么才能从列表中删除项目?

3 个答案:

答案 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)

  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;