Javascript - 需要重复数组迭代,每x秒更改一次元素的类

Javascript - Need to repeat array iteration that changes element's class every x seconds

本文关键字:元素 一次 数组 迭代 Javascript      更新时间:2023-09-26

我目前需要使用javascript继续循环遍历数组。 以下是我能想到的单向方法,但 1-它不起作用,2- 想知道是否有更优化或紧凑的方法来实现这一目标?

var myArray=[1,2,3,4]
for (var i=0; i<myArray.length; i++)
{
     console.log(i + 'hi')
     if (i==3)
     {
        i=0;
     }
}
根据每

10 秒要执行的操作的注释:

// IIFE to keep the variable i contained to a new scope
+function ( ) {
    var DURATION = 10;
    var i = 0;
    setInterval( function ( ) {
        // Do something every ten seconds 
        console.log( arr[i] );
        // Increment i (mod array.length)
        i = (i + 1) % array.length;
    }, DURATION*1000 );
}();

您可以使用模运算符

var i = 0;
// loop forever
while(true) {
    console.log(myArray[i] + 'hi');
    // i % 4 is the remainder when dividing i by 4
    // so this will cause i to be 0, 1, 2, 3, 0, 1, ...
    i = (i + 1) % myArray.length;
}

也许这可以工作。

function foo() {
    var myArray = [1,2,3,4],
        i,
        len = myArray.length;
    for (i = 0; i < len; i += 1) {
       console.log(i + 'hi');
    }
}
while(true) {
    setTimeout(foo, 10000);
}
很高兴

更多地了解您的确切需求,但这是一种方法:

function loop(arr) {
    for (var i=0; i<arr.length; i++) {
        console.log('hi');
    }
    // OP wants a 10 second delay
    setTimeout(function () { loop(arr); }, 0);
}

编辑:

由于它在评论中说您想要 10 秒的延迟,我们可以将设置超时中的 0 更改为 10000。与无限循环相比,使用 setTimeout 的好处是它允许脚本中发生其他事件驱动的事情。

查看以下内容:

var myArray=[1,2,3,4]

for (var i=0; i<myArray.length; i++)
{
     console.log(myArray[i] + 'hi')
     if (i==3)
     {
        i=0;
     }
}

你错过了myArray[i]

另一个问题是这是一个无限循环,因为如果i == 3那么它会将"i"重置为零,导致您的循环永远不会达到 4 即。[1,2,3,4] ...只需删除 if 语句即可。