2017-02-13 15 views
1

私ははどのように左の文字列の配列に移動し、右

var characters = ["Jim", "Anna", "Nick", "Chris", "Peter"]; 

私の初期位置がジムである文字列の配列を持っている[0]。私が右にタイプしたら私は次のものに行きたい この場合、 "Anna"に。現在のインデックスに1を加えることでこれを行うことができます。

最初の位置から左にタイプすると、物事はより厄介になりますか?

どうしてジム[0] - >ピーター[4]に行くことができますか?作品

何かが

Jim[0] - 1 + characters.length which equals to 0 - 1 + 5 = 4 

であり、これはピーターです。しかし、現在の値がAnna [1]であり、Jim [0]に行きたい場合には、これを行うことができないため、これは間違っているようです。 As 1 - 1 + 5 = 5

+0

探しているものであるが、この答えを確認し、要件を満たしています。http://stackoverflow.com/questions/1985260/javascript-array-rotate –

+0

どのような言語ですか? Javaでは、int modは負の数で動作します(デルタは移動したい数値であると仮定します) '(((currentIndex + delta)%array.length)+ array.length)%array.length'。私は同様のテクニックがJavascriptでも機能すると信じています –

答えて

0

このようなものが動作します。

var characters = ["Jim", "Anna", "Nick", "Chris", "Peter"]; 
var index = 0; // Currently at Jim. 
var direction = -1; // 1 for right, -1 for left. 

// What's left of our current position? 
characters[(index + characters.length + dir) % characters.length]; // Peter! 
+0

既に 'index'を持っている場合、' direction'を使うのは何ですか? – destoryer

+0

こんにちはジョン、これは私が探していたロジックです。 %を理解していなかったようです。ありがとう、私は今日何かを学んだ:) –

+0

@changed 'index'は現在の点をマークすることに過ぎず、左または右に移動していた場合、' direction'はフラグを立てます。本当に解決策は最後の行の式だけでした。 –

0

条件付きで行うことができます。インデックスをハードコーディングするのではなく、変数に保存してください。これは、以下の擬似コード(申し訳ありませんが、これはのためにあった言語わかりませんでした)に似た何かをすることができます:

new_index = index-- 
if (new_index < characters.length) 
    index = characters.length - 1 

あなたはその後、アレイにアクセスすることが決定インデックスを使用することができます。あなたは前方に進むにつれてラップするのと同様の何かをすることができます。

0

条件を使用せずに左右のインデックスを計算する単一の式がないようです。

あなたがあれば、他の使用するか、1行だけのソリューションを必要としない場合は、次のように、あなたは三項演算子を使用することができます。

new_index = (direction=="left")?(index==0)?characters.length-1:index-1:(index==characters.length-1)?0:index+1 

上記のコードは唯一の2があると仮定しますのでご注意ください可能な方向。

0

これは、アレイを回転させる場合は、

(i % characters.length) + characters.length) % characters.length

var characters = ["Jim", "Anna", "Nick", "Chris", "Peter"]; 
 
var index; 
 
for(var i = -10; i < 10; i++){ 
 
    index = ((i % characters.length) + characters.length) % characters.length; 
 
    console.log(i + " > " + index + " = " + characters[index]); 
 
}

関連する問題