【问题标题】:Having trouble with a for loop not iterating enough循环不够迭代时遇到问题
【发布时间】:2013-04-13 04:17:42
【问题描述】:

所以我对这个 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 是一个有效的数组索引

标签: javascript jquery loops for-loop


【解决方案1】:

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

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

【讨论】:

  • 太棒了!非常感谢您的帮助!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2016-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 2020-05-26
      • 2013-12-10
      • 2017-06-02
      相关资源
      最近更新 更多