在javascript(jquery)

时间:2015-10-30 19:28:20

标签: javascript splice

我试图通过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();
    }

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

为了测试我的输出,我在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回答并回复

解决方案Thanx to 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();
}

3 个答案:

答案 0 :(得分:0)

我会更改一些内容,首先在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();
}

答案 1 :(得分:0)

使用.slice()代替slice

splice根本不会改变/操纵原始数组,它只是根据您的选择创建另一个数组。

private void start_Button(object sender, RoutedEventArgs e) { YourViewModel yourViewModel = (sender as Button).DataContext as YourViewModel ; if (yourViewModel != null) { yourViewModel.ProgressBarValue = <<The value you want to set>>; } } 会改变原始数组。

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

答案 2 :(得分:0)

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

您的代码存在一些问题:

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