循环语句无法迭代足够次数的问题

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。它似乎工作得很好。


0 是一个有效的数组索引。 - Smern
3个回答

4
问题出在for循环中。你从var i = dTrackerArray.length开始,然后取dTrackerArray[i],但是这个元素并不存在。此外,你忘记了迭代0索引元素。因此,你需要将for循环改为:for(var i=0; i<dTrackerArray.length; i++)
for(var i = dTrackerArray.length-1; i >= 0; i--)

1
易于忽略,但您需要 i >= 0编辑: 尽管我认为您的主要问题是在循环时修改数组。显然,使用我的修复方法,您将在第二个splice上获得越界错误。
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); 
}

0

你已经用调试器逐步执行过了吗?这可能是你需要做的来理解这里发生了什么。我想把这个放在注释里,但我还没有那些权限。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接