JS:用于循环暂停

时间:2014-03-06 21:47:22

标签: javascript for-loop conditional

如果满足某个条件,如何进行循环暂停?在下面的示例中,循环只显示所有值,而我希望它在任何时间跨越特定值(例如2)时停止:

a = [1,1,1,2,1,1,1,3,4,2,1]
for (var i = 0; i < a.length; i++) {
    if(a[i] == 2){
        setTimeout(console.log(a[i]), 1000)
    }else{
        console.log(a[i]);
    }
};

5 个答案:

答案 0 :(得分:0)

正如其他人所说,JavaScript中没有pause。以下是异步循环的示例;

(function() {
  var a = [1,1,1,2,1,1,1,3,4,2,1];
  var i = 0;
  var length = a.length;

  function iteration() {
    if (i == length) return;

    console.log(a[i]);

    if(a[i] == 2){
      setTimeout(iteration, 1000);
    }else{
      setTimeout(iteration, 0);
    }

    i++;
  };

  iteration();
}());

答案 1 :(得分:0)

你不能直接做,但你可以按如下方式模拟它(你可以在这里测试代码:http://jsfiddle.net/xSu5J/):

function myLoop(a) {
    function showElem(index) {
        if (index < a.length) {
            var nextWaitTime = (a[index] == 2) ? 1000 : 1; //1000: long period, 1: short period
            console.log(a[index]);
            setTimeout(function(){showElem(index+1)}, nextWaitTime);
        }
    }
    showElem(0);
}
myLoop([1,1,1,2,1,1,1,3,4,2,1]);

答案 2 :(得分:0)

小提琴:http://jsfiddle.net/Uqr49/

var a = [1, 1, 2, 3, 1, 1, 2, 3];

function pauseOnTwo(arr) {

    if (arr.length > 1) {
        var slice = arr.shift();
        if (slice === 2) {
            setTimeout(function () {
                console.log('found a two! ' + slice);
                pauseOnTwo(arr);
            }, 1000);

        } else {
            console.log('its not 2: ', slice);
            pauseOnTwo(arr);
        }

    } else {
        if (arr[0] === 2) {
            setTimeout(function () {
                console.log('found a two! ' + slice);
            });
        }
    }
}

pauseOnTwo(a);

答案 3 :(得分:0)

下面创建一个函数,它接受3个参数,一个数组,暂停的时间量(以毫秒为单位)以及要暂停的内容。在函数内部,它将创建一个私有函数,用于循环遍历数组。如果遇到pauseOn值,则使用setTimeout在指定的pauseTime

之后调用循环函数
var arr = [1,1,1,2,1,1,1,3,4,2,1];

function iterateArray(arr,pauseTime,pauseOn){
   var currentIndex=0;

   function loop(){    
      for(i=currentIndex;i<arr.length; i++){
         console.log(arr[i]);
         if(arr[i]==pauseOn){
            currentIndex = i+1;
            setTimeout(loop,pauseTime);
            return;
         }
      }
   }
   loop();
}
iterateArray(arr,3000,2);

答案 4 :(得分:-1)

我真的不知道你为什么想要达到这个目标,但是如果你想实现这个目标,你需要一个自称的功能:

function myLoop(index){ 
    index = index || 0;

    a = [1,1,1,2,1,1,1,3,4,2,1]
    for (var i = index; i < a.length; i++) {
        if(a[i] == 2){
            setTimeout(function(){
                console.log(a[i]);
                myLoop(++i)
            }, 1000)
            break;
        }else{
            console.log(a[i]);
        }
    };    
}

myLoop()

http://jsfiddle.net/EUh3m/2/