这与我之前问过的问题类似(Select X amount forward and backwards in an array, looping to beginning and end if needed

但是我在适应要解决的其他问题时遇到了麻烦。

给定任意数组和当前索引

[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;
}

最佳答案

看,您不需要for循环或任何东西。您只需要在数字上加上符号并取模数即可。

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


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

09-30 13:29
查看更多