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

从javascript中的数组对象中删除值(jquery),javascript,splice,Javascript,Splice,我试图通过javascript从数组中删除对象。我正在构建一个简单的移动jquery应用程序,希望从数组中删除项。我使用以下代码。我有一个清单,里面有复选框。每个复选框都有一个属于列表项的值。因此,当选中多个复选框时。。它应该从数组中删除所有这些对象(项) function deleteFunction() { objects = getObjects(); $("input:checked").each(function() {

我试图通过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();
    }
令人讨厌的是: 当我从数组中切片对象时,对象将在第二次迭代中恢复。所以它总是只从数组中删除一个对象

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();
    }
为了测试我的输出,我在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,但是已经回来了

谢谢你的回答和回复

解决方案Thanx至depperm+无争议:

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()
只需使用
对象即可。然后在
if
中,只需检查
对象[i].title
是否与
输入值相同

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
根本不改变/操作原始数组,它只是根据您的选择创建另一个数组

拼接
会改变原始阵列


参考:

数组方法
切片
不会删除数组元素。改用
拼接

您的代码存在一些问题:

  • 您有时会错过关键字
    var
  • 变量
    i
    等于第一次迭代中数组的长度。应该是一减去那个
  • 您可以只比较title属性的值,而不是转换为JSON来比较对象

  • 删除/注释掉return-true语句。我将slice改为splice:D,这几个小时我的代码乱七八糟:Dthanx。。这就是我在主要帖子下面添加的解决方案