如何在左右字符串数组中导航

时间:2017-02-13 22:43:08

标签: arrays algorithm iteration subtraction

我有一个字符串数组

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

我的初始职位是吉姆[0]。如果我输入正确,我想去下一个 在这种情况下,“安娜”。我可以通过在当前索引中添加一个来完成此操作。

当我从初始位置向左键入时,事情变得越来越棘手?

那我怎么能从Jim [0] - >彼得[4]?

有效的东西是

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

这是彼得。但这似乎是不正确的,因为在当前值为Anna [1]并且我想要去Jim [0]的情况下我不能这样做。作为1 - 1 + 5 = 5

4 个答案:

答案 0 :(得分:0)

你可以做一个有条件的。将索引保存在变量中而不是硬编码。这将允许您执行类似于以下伪代码的操作(抱歉,我不确定这是用于哪种语言):

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

然后,您可以使用该确定的索引来访问该阵列。你也可以采用类似的东西来绕回前进。

答案 1 :(得分: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 + direction) % characters.length]; // Peter!

答案 2 :(得分:0)

似乎没有单一的公式来计算左右索引而不使用条件。

如果您不打算使用if-else或只想要一个单行解决方案,您可以按如下方式使用三元运算符:

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

请注意,上述代码假设只有两个可能的方向。

答案 3 :(得分:0)

这就是你要找的东西

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

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