2015-02-10 3 views
7

Angenommen, ich hätte ein Array von 5 Strings. Wie kann ich eine for-Schleife bei Index 3 starten und herumgehen und bei Index 2 landen? Lassen Sie mich ein Beispiel geben.Wie durchläuft man Arrays, die mit einem anderen Index beginnen, während man immer noch das gesamte Array durchläuft?

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

Möchten bei Index 3 ("farout") loop bis zur Ende-Array ("Super") beginnen dann mit dem Index 0 bis Index weiterhin Looping 2. Grundsätzlich ein Array, beginnend an einem Punkt (ausgenommen Index 0) und immer noch jedes Element im Array treffen.

+0

Ja, ich weiß, ich brauche eine For-Schleife, und ja, ich weiß, wie eine For-Schleife zu tun, ich weiß nur nicht, wie es einzurichten so frage ich mich – dragonore

+0

Kann ich fragen, warum Sie das tun möchten? - Wenn Sie jedes Element im Array treffen - warum ist das wichtig? –

+1

Nun, ich habe ein Blackjack-Spiel, an dem ich gerade arbeite. Ich muss in der Lage sein, dies zu tun, damit ich Karten ersetzen kann, die sich wiederholen. Ich speichere die Wiederholungswerte in einem Array und muss sie dann durchlaufen. Da das Array dynamisch ist, muss ich manchmal bei Index 3 oder 4 oder 1 oder was auch immer anfangen. Danke für die Nachfrage – dragonore

Antwort

13

Eine Möglichkeit ist durch die Array-Schleife eines Index als normal verwenden, und verwenden Sie den Modulo-Operator mit dem Offset, einen Zeiger auf die richtige Stelle in der Anordnung zu erhalten:

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]); 
} 

So Ihre Schleife eine Standardschleife durch jedes Element. Sie nehmen die aktuelle Position plus Offset und erhalten den Rest aus der Division durch die Größe des Arrays. Bis Sie das Ende des Arrays erreichen, wird das genau so wie ich + Offset. Wenn Sie das Ende des Arrays erreichen, wird der Rest Null sein und von dort aus gehen.

Here's a fiddle.

+1

Der Offset sollte 3 für die OP-Frage sein. – k0pernikus

+1

Danke, funktioniert wie ein Zauber. Ich wusste, wie man das mit einer Reihe von || in einem wenn, aber das sieht nicht gut aus und kann nicht modularisiert werden. Ihre Lösung funktioniert großartig. Bei Google konnte dazu nichts gefunden werden. Danke – dragonore

5

Hier ist, was Sie brauchen:

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

Dachte nicht einmal, modulas zu benutzen. Funktioniert gut. – dragonore

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