任何人都可以提出一个片段或简短的方法来解决这个问题:
array = [a,b,c,d,e,f]
currentIndex = 2;
getOffset(array,currentIndex,2); // 2+2 = 4 -> return 'e'
getOffset(array,currentIndex,-2); // -> return 'a'
getOffset(array,currentIndex,-3); // -> return 'f'
getOffset(array,currentIndex,-4); // -> return 'e'
getOffset(array,currentIndex, 5); // -> return 'b'
因此,如果目标索引大于array.length或< 0 - >模拟数组中的圆形循环并继续进入索引。
任何人都可以帮助我吗? 我试过,但得到了一个错误的脚本:(
TY!
答案 0 :(得分:5)
试试这个:
function getOffset(arr,index, offset){
return arr[(arr.length+index+(offset%arr.length))%arr.length];
}
答案 1 :(得分:2)
我想这应该可以解决问题:
function getOffset(arr,n,offset) {
offset = offset || 0;
var raw = (offset+n)%arr.length;
return raw < 0 ? arr[arr.length-Math.abs(raw)] : arr[raw];
}
var arr = ["a", "b", "c", "d", "e", "f"];
getOffset(arr,-3,2); //=> 'f'
getOffset(arr,-3); //=> 'd'
//but also ;~)
getOffset(arr,-56,2); //=> 'a'
getOffset(arr,1024,2); //=> 'a'
答案 2 :(得分:1)
使用模数运算符:
function getOffset(arr, index, step) {
return arr[(((index + step) % arr.length) + arr.length) % arr.length];
}