Example: javascript range
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;
}
// 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", "!"]