【问题标题】:shift() method is not running correctly, it only shift for 2-3 times and then it wouldn't shiftshift() 方法运行不正确,它只移动了 2-3 次,然后就不会移动了
【发布时间】:2021-11-25 01:41:57
【问题描述】:

这是我的代码,请给出一些解决方案。

输入:-

var b = [167,244,377,56,235,269,23];

for(var temp=0;temp<b.length;temp++){

    console.log(b)
    b.shift();
}

输出:-

[ 167, 244, 377,56, 235, 269,23]
[ 244, 377, 56, 235, 269, 23 ]
[ 377, 56, 235, 269, 23 ]
[ 56, 235, 269, 23 ]

【问题讨论】:

  • 如果b 缩小,那么b.length 也会变小,所以temp&lt;b.length 发生得更快。
  • 你需要使用while
  • while(b.length){}

标签: javascript arrays typescript for-loop


【解决方案1】:

Condition 在 for 循环中每次都会被检查。而且每次b.lenght 越来越小。 您只需将b.length 保存在某处并使用它的值。

var b = [167,244,377,56,235,269,23];
const length = b.length;

for(var temp=0;temp<length;temp++){
    console.log(b)
    b.shift();
}

【讨论】:

    【解决方案2】:

    当你移动时,你会从数组中删除一个项目。数组大小缩小。您正在循环当前数组长度,而不是原始数组长度。

    i=0; b.length=7 --> 0 < 7 === true
    i=1; b.length=6 --> 1 < 6 === true
    i=2; b.length=5 --> 2 < 5 === true
    i=3; b.length=4 --> 3 < 4 === true
    i=4; b.length=3 --> 4 < 3 === false
    

    所以要么存储原始长度,要么从长度循环到零,或者使用 while 循环。

    var b = [...]
    var length = b.length;
    for(var temp=0; temp<b.length; temp++){
      //code
    }
    

    var b = [...]
    for(var temp=b.length; temp>=0; temp--){
      //code
    }
    

    while(b.length) {
      //code
    }
    

    【讨论】:

      【解决方案3】:

      我命令继续循环直到b 没有元素,删除temp++ 最终表达式。

      var b = [167, 244, 377, 56, 235, 269, 23];
      for (var temp = 0; temp < b.length;) {
        console.log(b);
        b.shift();
      }

      相反,您可以将 shift 方法调用移至最终表达式

      var b = [167, 244, 377, 56, 235, 269, 23];
      for (var temp = 0; temp < b.length; b.shift()) {
        console.log(b);
      }

      由于我们在for 循环中从数组中删除元素,我们根本不应该增加temp。考虑到这一点,我们还可以将循环转换为while 循环。

      var b = [167, 244, 377, 56, 235, 269, 23];
      while (b.length > 0) {
        console.log(b);
        b.shift();
      }

      【讨论】:

        【解决方案4】:

        发生这种情况是因为当数组被移动时,它的长度也在增加,这可以通过创建一个具有数组长度的常量来解决,首先这里是代码:

        var b = [167,244,377,56,235,269,23];
        const length = b.length;
        for(var temp=0;temp<length;temp++){
            console.log(b)
            b.shift();
        }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多