range1 javascript code example

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

Example 2: for in range javascript

function* range(start=0, end=null, step=1) {
  if (end == null) {
    end = start;
    start = 0;
  }

  for (let i=start; i < end; i+=step) {
    yield i;
  }
}