2

I am pretty sure such a function exists in some library/NPM module, alas, my attempts to find one have failed.

I am looking for something along the line of the range() function in this snippet:

 var a = range(4);
 expect(a).toEqual([0, 1, 2, 3]);
Itay Maman
  • 30,277
  • 10
  • 88
  • 118

3 Answers3

4

http://underscorejs.org/#range

_.range(10);
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
_.range(1, 11);
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
_.range(0, 30, 5);
=> [0, 5, 10, 15, 20, 25]
_.range(0, -10, -1);
=> [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
_.range(0);
=> []
Scott
  • 1,648
  • 13
  • 21
3

You can create one yourself with this oneliner (Source: Creating range in JavaScript - strange syntax)

function range(end) {
    return Array.apply(null, {length: end}).map(Number.call, Number);
}

console.log(range(4));
// [ 0, 1, 2, 3 ]
Community
  • 1
  • 1
thefourtheye
  • 233,700
  • 52
  • 457
  • 497
0

Underscore's implementation of range:

function range(start, stop, step) {
    if (arguments.length <= 1) {
      stop = start || 0;
      start = 0;
    }
    step = arguments[2] || 1;

    var length = Math.max(Math.ceil((stop - start) / step), 0);
    var idx = 0;
    var range = new Array(length);

    while(idx < length) {
      range[idx++] = start;
      start += step;
    }

    return range;
  };

Usage:

// stop 10
range(10); //[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

// start 5, stop 10
range(5, 10); //[5, 6, 7, 8, 9]

// start 1, stop 10, step 2
range(1, 10, 2); //[1, 3, 5, 7, 9]
Marlon Bernardes
  • 13,265
  • 7
  • 37
  • 44