Skip to content

Instantly share code, notes, and snippets.

@adriancmiranda
Last active April 25, 2020 14:52
Show Gist options
  • Save adriancmiranda/97fb27cec831dab9fc8975aa60cbbf7d to your computer and use it in GitHub Desktop.
Save adriancmiranda/97fb27cec831dab9fc8975aa60cbbf7d to your computer and use it in GitHub Desktop.
The range type represents a sequence of numbers and is commonly used for looping a specific number of times in for loops.
export function range(start, stop, step = 1, circularFill = false, map = (value) => value) {
if (typeof stop === 'undefined') {
stop = start;
start = 0;
}
if (step > 0 && start >= stop) {
step = -step;
}
if (step < 0 && start <= stop) {
return [];
}
let index = start;
const result = [];
if (circularFill) {
const size = start + stop;
for (index; step > 0 ? index < size : index > size; index += step) {
result.push(map(index % stop));
}
return result;
}
for (index; step > 0 ? index < stop : index > stop; index += step) {
result.push(map(index));
}
return result;
}
export default range;
@adriancmiranda
Copy link
Author

adriancmiranda commented Apr 25, 2020

Range examples:

range(8)

[0, 1, 2, 3, 4, 5, 6, 7]

range(-8)

[0, -1, -2, -3, -4, -5, -6, -7]

range(25, 30, 2);

[25, 27, 29]

range(-25, -30, -2);

[-25, -27, -29]

range(5, 10, 1, true)

[5, 6, 7, 8, 9, 0, 1, 2, 3, 4]

range(-5, -10, -1, true)

[-5, -6, -7, -8, -9, -0, -1, -2, -3, -4]

function rangeChars(text, start, stop, step, circularFill, map = (value) => value) {
  start = text.indexOf(start);
  stop = text.indexOf(stop) + 1;
  return range(start, stop, step, circularFill, (i) => {
    return map(text[i]);
  });
}
rangeChars('shooooouuut!!!!', 'o', '!');

["o", "o", "o", "o", "o", "u", "u", "u", "t", "!"]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment