JS: range()

JavaScript does not have a range() operator, but can be implemented using generators :

function* range2(start, end, step) {
	step = step || 1
	yield start;
	if (step > 0 && start >= end) return;
	if (step < 0 && start <= end) return;	
	yield* range(start + step, end, step);
}

function* range(start, end, step) {
	step = step || 1
	if (step > 0) { for (let i = start; i < end; i+= step) yield i; }
	else { for (let i = start; i > end; i+= step) yield i;}
}


console.log([...range2(0,6)])
console.log([...range2(0,10,3)])
console.log([...range2(10,0,-3)])
console.log([...range(0,11,2)])
console.log([...range(10,-1,-2)])

-----

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