#Array Bouncing Generator
I want to cycle through the values in an array. When I get to the end, I want to cycle back through the values in reverse. I want to do this an unknown number of times.
Given an array like [1, 2, 3, 4]
, give me the values 1, 2, 3, 4, 3, 2, 1, 2, 3, 4, 3, 2
(etc).
You can do this with a generator function:
function* bounce(values) {let step = -1;let size = values.length;let current = 0;while (true) {if (size < 2) {yield values[0];} else {yield values[current];// reverse direction at array boundaryif (current === size - 1 || current === 0) step *= -1;current += step;}}}
Usage:
const myValues = [1, 2, 3, 4, 5];const valueIterator = bounce(myValues);let result = '';// Bounce through the array until we have 20 valuesfor (let i = 0; i < 20; i++) {result += valueIterator.next().value;}// Logs "12345432123454321234"console.log(result);