for循环有问题,迭代不够

时间:2013-04-19 17:24:03

标签: javascript jquery loops for-loop

所以我对这个FOR循环有一个问题,我无法弄明白。在这种情况下,我知道这需要迭代至少两次。数组至少看起来像这样......

    dTrackerArray = {sParentValue, 1234, sParentValue, 5678}

但由于某种原因,这个for循环只删除一个实例而不是所有实例。

     var check = $.inArray(sParentValue, dTrackerArray);
      if (check != -1) {
       for(var i = dTrackerArray.length; i > 0; i--) {
         if( dTrackerArray[i] === sParentValue ) {
          dTrackerArray.splice(i,1);
          dTrackerArray.splice(i-1,1);
          }

      }}

我真的很感激我能得到的任何帮助!谢谢!

编辑:第二个拼接是用sParentValue删除1234“关联”。它似乎工作正常。

3 个答案:

答案 0 :(得分:4)

问题出在for循环中。你从:var i = dTrackerArray.length开始并取dTrackerArray[i]这个元素不存在。更多的是你忘了与0索引元素进行交互。因此,您必须将for循环更改为:

for(var i = dTrackerArray.length-1; i >= 0; i--)

答案 1 :(得分:1)

容易错过,但您需要i >= 0

修改 虽然我认为你的主要问题是你在循环时修改数组。显然,通过我的修复,你会在第二次拼接时出现错误界限。

var check = $.inArray(sParentValue, dTrackerArray);
      if (check != -1) {
       for(var i = dTrackerArray.length; i >= 0; i--) {
         if( dTrackerArray[i] === sParentValue ) {
          dTrackerArray.splice(i,1);
          dTrackerArray.splice(i-1,1); //when i == 0 then exception
          }

      }}

由于您知道数组的格式,因此可以使用while循环执行此操作:

var check = $.inArray(sParentValue, dTrackerArray);
while(check > -1)
{
  dTrackerArray.splice(check,1);
  check = $.inArray(sParentValue, dTrackerArray); 
}

答案 2 :(得分:0)

您已经使用调试器完成了这项工作?这可能是你需要做的就是要了解这里发生的事情。我把它放在评论中,但我还没有这些特权。