遇到for循环迭代不够的问题



所以我有一个问题,这个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。

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

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

容易错过,但你需要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); 
}

您已经使用调试器完成了这个步骤?这可能就是你所需要做的,来理解这里发生了什么。我想把它放在注释中,但是我还没有这些权限。

最新更新