从 javascript (jquery) 中的数组对象中删除值

Delete value from array object in javascript (jquery)

我正在尝试通过 javascript 从数组中删除对象。我正在构建一个简单的移动 jquery 应用程序并希望从数组中删除项目。我使用以下代码。我有一个带有复选框的列表。每个复选框都有一个属于列表项的值。因此,当检查多个复选框时。

function deleteFunction()
    {
        objects = getObjects();
        $("input:checked").each(function()
        {
            var inputValue = $(this).val();
            for(i = getObjects().length; i >=0; i--)
            {

                if('{"title":"'+ inputValue + '"}' == JSON.stringify(objects[i]))
                {
                    objects.splice(i, 1);
                    return true;
                }
            }

        });
        alert(JSON.stringify(objects));
        window.location.reload();
    }

烦人的事情如下: 当我从数组中切片对象时,该对象将在第二次迭代中恢复。所以它总是只从数组中删除 1 个对象。

为了测试我的输出,我在 if 语句中使用了以下代码:

alert(i);
alert(JSON.stringify(objects[i]));  
objects.splice(i, 1);
alert(i);
alert(JSON.stringify(objects)); 
return true;    

输出结果如下

1
{"title":"hi2"}
1
[{"title":"hi1"}, {"title":"hi3"}]
2
{"title":"hi3"}
2
[{"title":"hi1"}, {"title":"hi2"}]

所以我切片 hi2,但已经返回

感谢回答和回应

解决方案 感谢 depperm + indubitablee:

function deleteFunction()
{
    var objects = getObjects();
    $("input:checked").each(function()
    {
        var inputValue = $(this).val();
        for(i = objects.length -1; i >=0; i--)
        {           
            if(objects[i].title == inputValue)
            {                               
                objects.splice(i, 1);           
            }
        }

    });
    localStorage.setItem("objects", JSON.stringify(objects));
    window.location.reload();
}

有几处我要更改,首先在 for 循环中无需每次都调用 getObjects(),只需使用 objects。然后在 if 中检查 objects[i].title 是否与 inputValue 相同。

function deleteFunction()
{
    objects = getObjects();
    $("input:checked").each(function()
    {
        var inputValue = $(this).val();
        for(i = objects .length; i >=0; i--)
        {
            if(objects[i].title==inputValue)
            {
                objects.splice(i, 1);                     
            }
        }

    });
    alert(JSON.stringify(objects));
    window.location.reload();
}

使用 .splice() 而不是 .slice()

slice 根本不是 alter/manipulate 原始数组,它只是根据您的选择创建另一个数组。

splice 确实改变了原始数组。

参考:http://www.devcurry.com/2010/12/slice-and-splice-in-javascript.html

数组方法slice不删除数组元素。请改用 splice

您的代码存在一些问题:

  1. 您有时错过了关键字 var
  2. 变量i在第一次迭代中等于数组的长度。应该是一减那个。
  3. 而不是转换为 JSON 来比较 objects,您可以只比较标题的值 属性。