我有一个字符串数组
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
答案 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
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;