2015-02-10 158 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++; 
}