2015-02-10 156 views
7

假设我有一个5个字符串的数组。我怎样才能在索引3开始一个for循环,并在索引2处结束?让我举个例子。如何在循环遍历整个数组的同时循环遍历从不同索引开始的数组?

var myArry = ["cool", "gnarly", "rad", "farout", "awesome"]; 

想在索引3(“farout”)循环通过对阵列的端部开始(“真棒”),然后继续在索引0,通过索引2循环基本上开始在某个点的阵列比(其他索引0)并且仍然击中数组中的每个元素。

+0

是的,我知道,我需要一个For循环,是的,我知道该怎么做for循环中,我只是不知道如何设置它在我问的这样一个问题的方式 – dragonore 2015-02-10 11:19:58

+0

我可以问你为什么要这样做吗? - 如果你击中阵列中的每一个元素 - 为什么这很重要? – 2015-02-10 11:23:14

+1

那么我有一个我正在为休闲工作的二十一点游戏。我需要能够做到这一点,以便我可以替换重复的牌。我将重复值存储在一个数组中,然后我需要遍历它们。由于数组是动态的,所以有时我必须从索引3或4或1开始,或者其他什么。感谢您询问 – dragonore 2015-02-10 11:26:50

回答

13

一种方法是遍历使用索引为正常的阵列,并使用模运算符与偏移,以获得一个指向数组中的正确位置:

var myArry = ["cool", "gnarly", "rad", "farout", "awesome"]; 
var offset = 3; 
for(var i=0; i < myArry.length; i++) { 
    var pointer = (i + offset) % myArry.length; 
    console.log(myArry[pointer]); 
} 

所以,你的循环是通过每个元素的标准循环。你取当前位置加上偏移量,并从中除以数组的大小得到余数。直到你到达数组的末尾,这将与i + offset相同。当你到达数组的末尾时,余数将为零,然后从那里开始。

Here's a fiddle

+1

OP问题的偏移量应为3。 – k0pernikus 2015-02-10 11:29:06

+1

谢谢,作品像一个魅力。我知道如何使用一系列||来做到这一点在一个如果,但不好看,不能模块化。您的解决方案很好。在Google上找不到关于此的任何内容。 Thanx – dragonore 2015-02-10 11:29:58

5

这里有您需要什么:

var start = 3; 
for(var z=0;z<myArry.length;++z) { 
    var idx = (z+start) % myArry.length; 
    console.log(myArry[idx]); 
} 
+1

甚至没有想过使用modulas。工作正常。 – dragonore 2015-02-10 11:32:44

1
var startAt = 3; 
for(var index = 0;index<myArry.length;index++){ 
    console.log(myArry[startAt]); 
    if(startAt==myArry.length-1){ 
     startAt = -1; 
    } 
    startAt++; 
}