我如何在迭代之间设置一秒延迟?

问题描述:

var arr = [[1,2,3],[4,5,6],[7,8,9]]; 


function out(ar){ 

    var interval = setInterval(function(){ 
    for (var i=0; i<ar.length;i++){ 

     for (var j=0;j<ar[i].length;j++){ 

     document.write(ar[i][j]); 

     } 
    document.write("</br>"); 
    } 
    clearInterval(interval); 
    },1000); 

} 

out(arr); 

http://jsbin.com/edanib/edit我如何在迭代之间设置一秒延迟?

此代码的工作,但我想每个输出数字之前做出一秒的延迟。 上面的代码不能这样做。我该怎么做vanilla Javascript?

+3

请勿使用'document.write'。 – SLaks

setInterval不能保证获得优1个第二间隔,因为其他的事情可能会遇到,但你可以用下面的

function out(ar) { 
    var i = 0, j = 0; 
    var interval = setInterval(function(){ 
    // Start with the next row if the last one was finished. 
    if (i < ar.length && j == ar[i].length) { 
     ++i; 
     j = 0; 
     // Put a line after it. 
     document.body.appendChild(document.createElement('br')); 
    } 
    // Check if we're out of rows. 
    if (i >= ar.length) { clearInterval(interval); return; } 

    // Write out a number. 
    document.body.appendChild(document.createTextNode('' + ar[i][j])); 

    // We're done with the cell that we just wrote. 
    ++j; 
    }, 1000 /* milliseconds */); 
} 

亲近把数组索引的功能之外,所以每次间隔火灾,它从上次运行中获得循环状态。

此外,您不能在间隔处理程序中使用document.write,因为在文档关闭之后调用document.write会破坏现有文档。

+0

谢谢!但我想输出他们像这样123 br 456 br 789可能吗? – DrStrangeLove

+0

@DrStrangeLove,我编辑来做到这一点。 –

+0

非常感谢! :) – DrStrangeLove

最简单的方法是用setInterval创建一个循环。具备的功能捕捉计数器,并增加他们适当动辄

请尝试以下

function output(arr) { 
    var i = 0; 
    var j = 0; 
    var interval = setInterval(function() { 

    while (i < arr.length && j === arr[i].length) { 
     j = 0; 
     i++; 
    } 

    if (i === arr.length) { 
     clearInterval(interval); 
    } else { 
     document.write(arr[i][j]); 
    } 
    j++; 
    }, 1000); 
}; 
+0

小数点。如果传递一个空数组,这将导致控制台中的垃圾邮件异常。 –

+0

@MikeSamuel好抓。已更新为处理空arr并正确处理空子数组(arr [i]') – JaredPar

尝试这样的:首先,创建一维数组,你给调用输出功能本身延迟:

var arr = [[1,2,3],[4,5,6],[7,8,9]]; 


function out(ar){ 
    var singleDim = [] 
    for (var i=0; i<ar.length;i++){ 

     for (var j=0;j<ar[i].length;j++){ 

      singleDim.push(ar[i][j]); 

     } 
    } 
    outDelayed(singleDim,0,1000); 
} 

function outDelayed(arr,index,delay) { 
    if (index < arr.length) { 
     document.write(arr[index]); 
     setTimeout(function(){ 
      outDelay(arr,index+1,delay); 
     },delay); 
    } 
} 

out(arr);