假设我有一个像这样的数组:
var arr = [0,1,2,3,4];
我想创建一个for循环来遍历数组并将每个项目记录到控制台,但我希望它可以单独地将每个项目记录到控制台,并且每个项目都会在前一个项目后一秒钟记录到控制台,我该怎么做?
var arr = [0,1,2,3,4];
我想创建一个for循环来遍历数组并将每个项目记录到控制台,但我希望它可以单独地将每个项目记录到控制台,并且每个项目都会在前一个项目后一秒钟记录到控制台,我该怎么做?
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)
我想把@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]())
我也想这样做,这是我在代码中尝试的:
array=[];
setInterval(mediaTweet, 1000 *60 *2)// every 2min
function mediaTweet () {
let tweet = { status: array[index++ % array.length]
}
T.post('statuses/update', tweet, tweeted);
}
仅仅为了演示,这里使用了一个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);