Javascript 将for循环与setInterval()组合

Javascript 将for循环与setInterval()组合,javascript,for-loop,setinterval,Javascript,For Loop,Setinterval,我的目标是每5秒在coords变量中将每个坐标对连续记录到控制台。我可以使用setInterval()函数一次对coords中的每一对进行此操作,但是如何在5秒时记录coords[0],在10秒时记录coords[1],在15秒时记录coords[2]等等,然后在完成后重新开始 coords = [[ -122.68181, 45.523713333333333 ], [ -122.681848333333363, 45.52369833333335 ], [ -122.68199666666

我的目标是每5秒在
coords
变量中将每个坐标对连续记录到控制台。我可以使用
setInterval()
函数一次对
coords
中的每一对进行此操作,但是如何在5秒时记录
coords[0]
,在10秒时记录
coords[1]
,在15秒时记录
coords[2
]等等,然后在完成后重新开始

coords = [[ -122.68181, 45.523713333333333 ], [ -122.681848333333363, 45.52369833333335 ], 
[ -122.681996666666691, 45.523683333333338 ], [ -122.682078333333351, 45.523733333333332 ],
[ -122.681916666666694, 45.523736666666665 ], [ -122.6815766666667, 45.523753333333346 ], 
[ -122.68182333333M3355, 45.523741666666659 ], [ -122.681823333333355, 45.523753333333339 ],
[ -122.681656666666683, 45.52375 ], [ -122.68162833333335, 45.523738333333334 ], [ -122.681936666666701, 45.52373 ]]

function listCoords() {
  for (var i=0, l=coords.length; i<l; i++) { 
    console.log(coords[i])
  }
}

setInterval(function(){
 listCoords()
}, 5000);
coords=[-122.68181,45.52371333333333],-122.681848333363,45.52369833335],
[ -122.681996666666691, 45.523683333333338 ], [ -122.682078333333351, 45.523733333333332 ],
[ -122.681916666666694, 45.523736666666665 ], [ -122.6815766666667, 45.523753333333346 ], 
[-122.68182333M3355,45.5237416666659],[122.681823333355,45.523753333339],
[ -122.681656666666683, 45.52375 ], [ -122.68162833333335, 45.523738333333334 ], [ -122.681936666666701, 45.52373 ]]
函数listCoords(){
对于(变量i=0,l=coords.length;i
只需保留一个全局变量,该变量存储下一个要显示的位置。如果调用该函数,则显示该值,增加i并防止它跳出数组边界。其工作原理如下:

想象一个数组长度为3,itll do

0
(0+1)%3 = 1
(1+1)%3 = 2
(2+1)%3 = 0 // the loop starts again
或者使用一些伪递归和超时:

;/*a semicolon, just for Andy ;) */
(function next(i){
   console.log(coords[i]);
   setTimeout(next,5000,(i+1)%coords.length);// show next one in 5 secs
})(0);//start with 0
只需保留一个全局变量,该变量存储下一个要显示的位置。如果调用该函数,则显示该值,增加i并防止它跳出数组边界。其工作原理如下:

想象一个数组长度为3,itll do

0
(0+1)%3 = 1
(1+1)%3 = 2
(2+1)%3 = 0 // the loop starts again
或者使用一些伪递归和超时:

;/*a semicolon, just for Andy ;) */
(function next(i){
   console.log(coords[i]);
   setTimeout(next,5000,(i+1)%coords.length);// show next one in 5 secs
})(0);//start with 0

在函数中嵌入一个
setTimeout
,该函数仅在索引小于
coords
长度时调用函数。在这里,我们使用一个立即调用的函数表达式(IIFE)传入
coords
和一个初始值i

var listCoords = (function listCoords(coords, i) {
  if (i && i <= coords.length) console.log(coords[i - 1]);
  setTimeout(listCoords, 5000, coords, ++i)
}(coords, 0));
var listCoords=(函数listCoords(coords,i){

如果(i&&i在函数中嵌入一个
setTimeout
,则仅当索引小于
coords
的长度时才调用该函数。在这里,我们使用立即调用的函数表达式(IIFE)传入
coords
和初始值i

var listCoords = (function listCoords(coords, i) {
  if (i && i <= coords.length) console.log(coords[i - 1]);
  setTimeout(listCoords, 5000, coords, ++i)
}(coords, 0));
var listCoords=(函数listCoords(coords,i){

如果(i&&i)一个人如何理解
i=+%coords.length;
?一个人如何理解
i=+%coords.length;
?全局listCoords应该包含什么?(可能未定义)这与我的回答有什么不同?对不起,我错了。在这种情况下,您可能需要修改代码,在左括号前面添加分号。全局listCoords应该包含什么?(可能未定义)这和我的答案有什么不同?对不起,我弄错了。在这种情况下,您可能需要修改代码,在左括号前面添加分号。