不断循环javascript数组并向div显示结果?

不断循环javascript数组并向div显示结果?,javascript,arrays,loops,Javascript,Arrays,Loops,我有一大堆关于我的站点的推荐信,它们当前在一个页面上,我正试图让一个div以5秒的间隔显示每个1,如果数组达到最后一个值,它应该重新开始回到数组的开头 这是我到目前为止所拥有的 var testimonial = new Array(); testimonial[1] = "Rugby"; testimonial[2] = "Baseball"; testimonial[3] = "Cricket"; var length = testimonial.length var i = 1; setI

我有一大堆关于我的站点的推荐信,它们当前在一个页面上,我正试图让一个div以5秒的间隔显示每个1,如果数组达到最后一个值,它应该重新开始回到数组的开头

这是我到目前为止所拥有的

var testimonial = new Array();
testimonial[1] = "Rugby";
testimonial[2] = "Baseball";
testimonial[3] = "Cricket";
var length = testimonial.length
var i = 1;
setInterval(function() {
    while (i <= length) {   
        $('#testimonials p').html(testimonial[i]);
        ++i;
        if (i == length) {
            i == 1;
        }
    }
}, 5000);
var-commential=new-Array();
推荐[1]=“橄榄球”;
推荐信[2]=“棒球”;
推荐[3]=“板球”;
变量长度=推荐长度
var i=1;
setInterval(函数(){
而(我你可以试试

setInterval(function() { 
    $('div').html(test[  (i = (i + 1) % length)  ]) },
5000);
试一试


JavaScript数组是0索引的,并且具有方便的数组文字语法。使用模数运算符(
%
)是一种惯用的方法,当计数器达到某个值时,将计数器包装回0。

setInterval中的函数每5秒调用一次。这意味着您每5秒一个接一个地显示5个证明,而不是一个接一个地显示

你应该这样做:

var testimonial = new Array();
testimonial[1] = "Rugby";
testimonial[2] = "Baseball";
testimonial[3] = "Cricket";
var length = testimonial.length
var i = 0; // arrays start with 0

setInterval(function() {
    $('#testimonials p').html(testimonial[i]);
    i++;
    if (i == length) i = 0;
}, 5000);

有很多有趣的答案,所以再回答一个也不会有什么坏处。:-)

您可以将其捆绑在一个立即调用的函数表达式中:

(function() { 
  var testimonials = ['Rugby', 'Baseball', 'Cricket'];
  var i = 0;
  setInterval(function() {
    $('#testimonials p').text(testimonials[++i % testimonials.length]);
  }, 5000);
}());

使用[]而不是新数组()我不知道这段代码是从哪里来的,但在javascript中,索引是从
0
@qwertymk开始的,我写了这段代码并感谢你为什么不把
var I=1;
放在
setInterval
中的匿名函数中?这样它会自动重置。就像qwertymk说的,索引是从0开始的。现在还不太清楚是什么问题是。什么不起作用?假设你从索引
0
开始,而不是
1
@divad12谢谢,你使用的运算符与php中的模数运算符相同吗?再次感谢,我会接受:)我能问你为什么将它从html()改为text()吗,使用一个或另一个有什么真正的区别吗?@collone我想是的——它返回第一个操作数的剩余部分除以第二个操作数。如果您只想在div中显示原始字符串,请参阅@collone。text将为您转义字符串。请参阅,由于预增量ope,行为将不完全相同如果你在
-1
处开始
i
,那么它将显示“Rugby”作为第一项。此外,我认为立即调用函数表达式的习惯用法是
(function(){…})(;
,而你有
(function(){…}());
(右括号)。
(function() { 
  var testimonials = ['Rugby', 'Baseball', 'Cricket'];
  var i = 0;
  setInterval(function() {
    $('#testimonials p').text(testimonials[++i % testimonials.length]);
  }, 5000);
}());