通过负索引访问数组元素

3

我希望能够通过任意索引访问数组内容。假设我们有一个包含三个元素的数组。在这里,取模运算非常方便,可以完美地解决任何正整数的问题:

var arr = array['foo', 'bar', 'foobar'];
var someInteger = 3;
var element = array[ someInteger%arr.length ]; // returns the first element 'foo'

现在我希望能够得到负整数的相同结果,但是我不知道怎么做 =(
var arr = array['foo', 'bar', 'foobar'];
var someInteger = -1; // I need this negative integer to return the last element which it doesn´t
var someInteger = -2; // I need this negative integer to return 'bar'
var someInteger = -3; // I need this negative integer to return 'foo'
var someInteger = -4; // I need this negative integer to return 'foobar'
var someInteger = -5; // I need this negative integer to return 'bar'

我真的希望我的问题足够清晰 =)


(注意:保留了HTML标签)
2个回答

7

您可以使用:

  1. n 整数
  2. n % l 整数范围在 (-l, l)
  3. n % l + l 整数范围在 (0, 2*l)
  4. (n % l + l) % l 整数范围在 [0, l)

在 JavaScript 中:

arr[(someInteger % arr.length + arr.length) % arr.length]

或者,您可以玩弄地板、天花板和截断:

n - Math.floor(n / l) * l; // in [ 0,l)
n - Math.ceil (n / l) * l; // in (-l,0]
n - Math.trunc(n / l) * l; // in (-l,l)

1
这真的非常非常有帮助!非常感谢,聪明的孩子!但愿我几个小时前就问了我的问题... - lilly
1
@lilly 完全没有问题 :) 如果你有很多索引,请考虑将其实现在一个函数中,以避免每次重复。 - Oriol

-2
如果这个数字是负数:
while(someInteger < 0)
    someInteger += arr.length;

然后像之前一样使用 array[someInteger%arr.length]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接