4

所以我对这个 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。它似乎工作正常。

4

3 回答 3

4

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

for(var i = dTrackerArray.length-1; i >= 0; i--)
于 2013-04-19T17:34:00.187 回答
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); 
}
于 2013-04-19T17:31:57.903 回答
0

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

于 2013-04-19T17:32:59.903 回答