2015-10-30 33 views
0

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

的讨厌的事如下: 当I切片从阵列的对象,该对象是在第二次迭代恢复。所以它总是只从数组中移除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(); 
} 
+0

删除/注释返回true语句。 – jeff

回答

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

我改变了切片拼接:D弄乱了我的代码很多最后几小时:D – user3402571

+0

thanx ..这是解决方案 我添加它也在我的主要职位 – user3402571

0

阵列方法slice不删除数组元素。改为使用splice

有一些问题与您的代码:

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