1

这与我之前提出的问题类似(在数组中向前和向后选择 X 数量,如果需要,循环到开头和结尾

但我无法将答案调整到我试图解决的不同问题。

给定一个任意数组和一个当前索引

[a, b, c, d, e, f, g, h, i, j, k]

假设当前索引现在为 0 (a)

我需要找到一个新的索引,给定一个 n 的偏移量(比如说 30,倒退也可能是负数)。这样它将遍历数组,当它到达结尾时从头开始(或者如果你向后循环,则从结尾继续)并返回新的数组索引。

我已经设法调整了类似问题的答案以使阵列向前移动,但是当我尝试将其更改为向后移动时它会中断。

function crawlArrayForwards(array, index, n){
    var finalIndex;
    for (var i = index, len = array.length; i <= index + n; i++) {
        finalIndex = (i + len) % len;
    }
    return finalIndex;
}
4

3 回答 3

7

看,你不需要 for 循环或任何东西。你只需要加上你的数字和它的符号并取模数。

function crawlArray(array, index, n) {
    return ((index + n) % array.length + array.length) % array.length;
}

就是这样。应该使用 n 的正值或负值。

于 2013-11-15T11:37:32.800 回答
0

它不是很优雅,但如果你有一个前进的工作方法,你可以在开头放一个'if'语句,检查它是否大于0。如果不是,你可以反转所有内容,乘以偏移-1,无论如何都要这样做!:D

于 2013-11-15T11:22:00.203 回答
0

好吧,如果您有a当前索引和b目标索引(可能大于或小于长度或零)

b2 = b % (list.length - 1)

提供数组中的有效索引。

如果你比减去b2 - a = d你知道要走多少步以及向上还是向下,取决于d是大于还是小于零

for(var i = a; i !== b2; i += (d > 0) ? 1 : -1) {

}
于 2013-11-15T11:33:19.873 回答