正在从列表中删除对象

removing object from list

本文关键字:删除 对象 列表      更新时间:2023-09-26

我正在尝试删除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/

我可以很好地添加我的元素。但当我试图移除它们时。什么都不管用。我哪里错了?

我从一个例子中得到了从数组中删除项的代码。也许问题不在于我在上面做错了什么,而是我需要做什么才能从列表中删除项目?

尝试

$(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);
    });
});

jsfiddlehttp://jsfiddle.net/51vbzne1/5/

这是因为您的筛选条件错误。

以下是正确的版本:http://jsfiddle.net/51vbzne1/3/

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

解释:您应该进行筛选以检查每个personId是否低于当前的idVal。由于您在过滤之前执行idVal -= 1,因此需要使用<=

或者,如果要删除特定项目。使用拼接,例如:eventObjs.splice(idVal, 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; 替换return el.personId !== (idVal - 1);