Javascript:如何每秒循环遍历每个数组项

5
假设我有一个像这样的数组:
var arr = [0,1,2,3,4];

我想创建一个for循环来遍历数组并将每个项目记录到控制台,但我希望它可以单独地将每个项目记录到控制台,并且每个项目都会在前一个项目后一秒钟记录到控制台,我该怎么做?


1
你有尝试过任何方法吗? - Etheryte
使用setTimeout或setInterval。 - Jaromanda X
4个回答

8
您可以使用时间间隔来完成操作,这里是一个例子:

var arr = [0,1,2,3,4];
var index = 0;
setInterval(function(){
    console.log(arr[index++ % arr.length]);
}, 1000)

上面的示例会多次循环遍历数组。如果您只想循环一次该数组,可以在所有元素都被记录时停止间隔。

var arr = [0,1,2,3,4];
var index = 0;
var interval = setInterval(function(){
     console.log(arr[index++]);
     if(index == arr.length){
        clearInterval(interval);
     }
}, 1000)


循环超过一次:p - Jaromanda X
@JaromandaX,我已经添加了一个新的示例,它可以在第一次迭代后停止记录日志。 - Titus

2

我想把@mhodges的答案稍微整理一下,用更简洁的ES6生成器函数

let myArray = [0, 1, 2, 3, 4]

let interval = setInterval(gen => {
  const { value, done } = gen.next()
  
  if (done) {
    clearInterval(interval)
  } else {
    console.log(value)
  }
}, 1000, myArray[Symbol.iterator]())


0

我也想这样做,这是我在代码中尝试的:

array=[];

setInterval(mediaTweet, 1000 *60 *2)// every 2min

function mediaTweet () {

let tweet = { status: array[index++ % array.length]
}

 T.post('statuses/update', tweet, tweeted); 
}

0

仅仅为了演示,这里使用了一个ES6 生成器函数来迭代数组的内容。你可以在setInterval()中继续调用generator.next(),直到完成对整个数组的迭代,此时清除定时器并完成。

var myArr = [0,1,2,3,4];

function* iterateOverArray (arr) {
  var i = 0;
  while (i < arr.length) {
    yield arr[i++];
  }
}

var generator = iterateOverArray(myArr);

var interval = setInterval(function () {
  var nxt = generator.next();
  if (!nxt || nxt.done) {
    clearTimeout(interval);   
  }
  else {
    console.log(nxt.value);
  }
}, 1000);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接