假设我有一个这样的数组:
var arr = [0,1,2,3,4];
所以我想制作一个for循环,循环遍历数组和控制台记录每个项目,但我希望它分别控制日志每个项目,每个项目将在上一个项目后的第二个控制台记录,我该怎么办此?
答案 0 :(得分:4)
您可以使用间隔。 这是一个例子:
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)

答案 1 :(得分:1)
以为我会用干净的@mhodges answer清理ES6 generator function一点{/ 3}}:
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]())
答案 2 :(得分:0)
仅仅是为了它,这是一个使用ES6 generator function迭代数组内容的例子。您将继续在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);