foop
Version:
interfaces that describe their intentions.
53 lines (48 loc) • 4.24 kB
JavaScript
var isNill = require('../is/nullOrUndefined')
/**
* Generate an integer Array containing an arithmetic progression. A port of
* the native Python `range()` function. See
* [the Python documentation](http://docs.python.org/library/functions.html#range).
*
* @name range
* @since 5.0.0-beta.6
* @memberOf math
*
* @param {number} start starting number
* @param {number} [stop] ending number, defaultsTo(start)
* @param {number} [step] step, defaultsto(-1 || 1)
* @return {Array<number>} [start...stop]
*
* {@link https://github.com/jashkenas/underscore/blob/master/underscore.js#L714 underscore-range}
* @see {@link underscore-range}
*
* @example
*
* 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)
* //=> []
*
*/
module.exports = function range(start, stop, step) {
if (isNill(stop)) {
stop = start || 0
start = 0
}
if (!step) {
step = stop < start ? -1 : 1
}
var length = Math.max(Math.ceil((stop - start) / step), 0)
var result = new Array(length)
for (var idx = 0; idx < length; idx++, start += step) {
result[idx] = start
}
return result
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UuanMiLCJzb3VyY2VzIjpbInJhbmdlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGlzTmlsbCA9IHJlcXVpcmUoJy4uL2lzL251bGxPclVuZGVmaW5lZCcpXG5cbi8qKlxuICogR2VuZXJhdGUgYW4gaW50ZWdlciBBcnJheSBjb250YWluaW5nIGFuIGFyaXRobWV0aWMgcHJvZ3Jlc3Npb24uIEEgcG9ydCBvZlxuICogdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVcbiAqIFt0aGUgUHl0aG9uIGRvY3VtZW50YXRpb25dKGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSkuXG4gKlxuICogQG5hbWUgcmFuZ2VcbiAqIEBzaW5jZSA1LjAuMC1iZXRhLjZcbiAqIEBtZW1iZXJPZiBtYXRoXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IHN0YXJ0aW5nIG51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdG9wXSBlbmRpbmcgbnVtYmVyLCBkZWZhdWx0c1RvKHN0YXJ0KVxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwXSBzdGVwLCBkZWZhdWx0c3RvKC0xIHx8IDEpXG4gKiBAcmV0dXJuIHtBcnJheTxudW1iZXI+fSBbc3RhcnQuLi5zdG9wXVxuICpcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvYmxvYi9tYXN0ZXIvdW5kZXJzY29yZS5qcyNMNzE0IHVuZGVyc2NvcmUtcmFuZ2V9XG4gKiBAc2VlIHtAbGluayB1bmRlcnNjb3JlLXJhbmdlfVxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogICByYW5nZSgxMClcbiAqICAgLy89PiBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV1cbiAqICAgcmFuZ2UoMSwgMTEpXG4gKiAgIC8vPT4gWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXVxuICogICByYW5nZSgwLCAzMCwgNSlcbiAqICAgLy89PiBbMCwgNSwgMTAsIDE1LCAyMCwgMjVdXG4gKiAgIHJhbmdlKDAsIC0xMCwgLTEpXG4gKiAgIC8vPT4gWzAsIC0xLCAtMiwgLTMsIC00LCAtNSwgLTYsIC03LCAtOCwgLTldXG4gKiAgIHJhbmdlKDApXG4gKiAgIC8vPT4gW11cbiAqXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmFuZ2Uoc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgaWYgKGlzTmlsbChzdG9wKSkge1xuICAgIHN0b3AgPSBzdGFydCB8fCAwXG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKCFzdGVwKSB7XG4gICAgc3RlcCA9IHN0b3AgPCBzdGFydCA/IC0xIDogMVxuICB9XG5cbiAgY29uc3QgbGVuZ3RoID0gTWF0aC5tYXgoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCksIDApXG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheShsZW5ndGgpXG5cbiAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgbGVuZ3RoOyBpZHgrKywgc3RhcnQgKz0gc3RlcCkge1xuICAgIHJlc3VsdFtpZHhdID0gc3RhcnRcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cbiJdLCJuYW1lcyI6WyJjb25zdCIsImxldCJdLCJtYXBwaW5ncyI6IkFBQUFBLEdBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQy9DLE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7RUFDakQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7SUFDaEIsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDO0lBQ2pCLEtBQUssR0FBRyxDQUFDO0dBQ1Y7RUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFO0lBQ1QsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztHQUM3Qjs7RUFFREEsR0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzVEQSxHQUFLLENBQUMsTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQzs7RUFFaEMsS0FBS0MsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFO0lBQ3BELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLO0dBQ3BCOztFQUVELE9BQU8sTUFBTTtDQUNkOyJ9