javascript create range copy range explained code example

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", "!"]