Search code examples
javascriptarraysmodulonegative-number

Accessing an element of an array through negative indexes


I want to access contents of an array by arbitrary indexes. Lets say we have an array with three elements in it. The modulo comes in handy here and solves the problem for any positive integer perfectly:

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

Now I would like to have the same result for negative integers but I do not know how =(

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'

I really hope my problem is clear enough =)


Solution

  • You can use

    1. n integer
    2. n % l integer in (-l, l)
    3. n % l + l integer in (0, 2*l)
    4. (n % l + l) % l integer in [0, l)

    In JavaScript,

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

    Alternatively, you can play with flooring, ceiling and truncating:

    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)