这与我之前问过的问题类似(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的正值或负值。