1

假设我有一个集合 [1,2,3,4] 我想从第一个元素迭代到最后一个元素,然后再返回到第一个元素。所以它应该是 1,2,3,4,1,2,3,4,1,2.... 直到有些事情是真的。

目前我正在考虑

while(IsSomethingTrue)
{
    for(var i=0;i<Myarr.length;i++)
    {
       //do-something
       if(i==(Myarr.length-1)) 
       {
            i=0; //setting it back to first index
       }
    }
}

我知道这是一个基本问题,上面是我可以实现目标的一种方法,但想知道是否有更好的方法,比如循环列表行的数据结构或 javascript 中的任何循环方法,可以一直迭代到结束数组并从头开始。

对于那些我需要这个的人来说:我正在尝试用 Javascript 可视化就餐哲学家,并且需要这种行为发生。

4

3 回答 3

2

虽然性能会降低,但如果您只想要更短的代码,并且不介意改变数组,您可以这样做:

while(IsSomethingTrue)
{
    var item = Myarr[0];
    // do something with item
    Myarr.push(Myarr.shift());
}

同样,需要明确的是,肯定会对性能产生一些影响。只是想我会把它作为一种可能性来展示。

如果您不想改变原始数组,也可以.slice()在进入循环之前使用浅克隆数组。while

于 2013-05-11T14:40:26.910 回答
1

您的逻辑很好,但是您可以节省一些字符-

var a= Myarr, L= a.length, i= 0;
while(i<L){
    //do-something with a[i]
    if(++i== L) i= 0; // increment or reset
}
于 2013-05-11T17:51:45.623 回答
1

您所说的解决方案足够高效且可读性强。单个 if 语句的成本不是很高。

另一种解决方案是使用循环链表。但是我认为除非您将元素插入到数据结构中,否则这不会为您带来任何好处。

于 2013-05-11T15:08:28.330 回答