2016-05-03 5 views
-1

Ich möchte eine Array-Zugriffsfunktion wie ein Laufband erstellen. Es kann sich in beliebiger Richtung bewegen, bis es den neuen Wert erreicht.JavaScript: Bewegung in beliebiger Richtung und beliebiger Größe in einem Array

Ich bin neu in JS. Ich habe diese Lösung gefunden, aber es fühlt sich schrecklich an. Ich frage mich, ob jemand eine bessere Lösung hat.

var pet = ['dog', 'cat', 'rat', 'horse', 'mouse']; 

function loop(posChange, array) { 
    if (isNaN(array.lp)) { 
    array.lp = 0; 
    }; 
    var newPos = array.lp + posChange; 
    array.lp = (array.length + newPos) % array.length; 
    return array[array.lp]; 
}; 

loop(2, pet); 

Edit: (redundant, wenn Aussagen entfernt). Stellen Sie sich aus Gründen der Klarheit einen Musikplayer mit 5 Songs vor, die eine Schleife bilden. Ich möchte 3 Songs weiterleiten, das Ergebnis erhalten, eine weitere 2 und dann wieder 1 weiterleiten. Ist das der beste Weg, dies zu tun?

var song = ['songa', 'songb', 'songc', 'songd', 'songe']; 

function loop(posChange, array) { 
    if (isNaN(array.lp)) { 
    array.lp = 0; 
    }; 
    var newPos = array.lp + posChange; 
    array.lp = (array.length + newPos) % array.length; 
    return array[array.lp]; 
}; 

loop(3, song); 
loop(2, song); 
loop(-1, song); 
+0

Wofür möchten Sie das Looping verwenden? Ich glaube nicht, dass ich es jemals für etwas gebraucht habe. – Halcyon

+0

Beachten Sie, dass 'array.lp = (array.length + newPos)% array.length;' in jedem Ihrer drei Fälle gleich funktioniert. – Hamms

+0

'array.push (arr.shift());' oder 'array.pop (arr.unshift());' – Redu

Antwort

0

Verwenden Sie den Modulo-Operator.

function loop (posChange, array) { array.lp = array.lp || 0; array.lp = (array.lp + posChange) % array.length; return array[array.lp]; } 
+0

Das ist gut zu wissen RK. Das Problem bei dieser Lösung ist, dass sie keine "Erinnerung" an die aktuelle Ticker-Position hat. –

+0

Das ist besser? Ich fügte eine array.lp Eigenschaft hinzu, um den Index des Bandes zu speichern. –

Verwandte Themen