2

誰かがこれを解決するためのスニペットまたは短い方法を提案できますか?

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!

4

3 に答える 3

5

これを試して:

function getOffset(arr,index, offset){   
    return arr[(arr.length+index+(offset%arr.length))%arr.length];
}
于 2012-06-22T09:33:31.660 に答える
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'
于 2012-06-22T09:35:41.150 に答える
0

剰余演算子を使用します。

function getOffset(arr, index, step) {
  return arr[(((index + step) % arr.length) + arr.length) % arr.length];
}
于 2012-06-22T09:18:51.200 に答える