2017-02-13 5 views
1

У меня есть массив строкКак ориентироваться в массиве строк слева и справа

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

мое первоначальное положение Джим [0]. если я наберу правый, я хочу перейти к следующему В этом случае «Анна». Я могу сделать это, добавив один к текущему индексу.

Вещь становится все более сложной, когда я печатаю слева от начального положения?

Итак, как я могу идти от Джима [0] -> Peter [4]?

Что-то, что работает,

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

и это Питер. Но это кажется неправильным, потому что я не могу этого сделать в случае, если текущее значение - Anna [1], и я хочу пойти в Jim [0]. Как 1 - 1 + 5 = 5

+0

Если вращающийся массив соответствует вашим требованиям, проверить этот ответ: http://stackoverflow.com/questions/1985260/javascript-array-rotate –

+0

На каком языке? В Java int mod работает с отрицательным числом, так что вы можете сделать что-то вроде (при условии, что delta - это номер, который вы хотите переместить) '(((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

Какой смысл использовать 'direction', если у вас уже есть' index'? – destoryer

+0

Привет, Джон, это логика, которую я искал. Похоже, я пропустил%. Спасибо, что я чему-то научился сегодня :) –

+0

@changed «index» был просто для того, чтобы отметить текущее место, а затем «direction» должно было обозначаться, если мы двигались влево или вправо. Действительно, решение было всего лишь формулой в последней строке. –

0

Вы можете сделать условное обозначение. Держите свой индекс в переменной вместо жесткого кодирования. Это позволит вам сделать что-то похожее на псевдокоде следующее (К сожалению, не был уверен, на каком языке это было для):

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

Вы можете использовать этот индекс определяется для доступа к массиву. Вы могли бы что-то подобное обернуть вокруг идущего вперед.

0

Кажется, что нет единой формулы для вычисления индекса слева и справа без использования условий.

Если вы не собираетесь использовать, если-то еще или просто хотите одно решение строки, вы можете использовать тройной оператор следующим образом:

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

Смежные вопросы