src/ncycle.js
/**
* Same as {@link cycle} but only cycles a limited number of times.
*
* @example
* // returns [0,1,0,1,0,1,0,1]
* list(ncycle(range(2),4)) ;
*
* @param {Iterable} iterable - The input iterable.
* @param {Number} n - The number of times to cycle through the input iterable.
* @returns {Iterator}
*
*/
export default function* ncycle(iterable, n) {
const buffer = [];
for (const item of iterable) {
yield item;
buffer.push(item);
}
if (buffer.length === 0) {
return;
}
while (--n > 0) {
yield* buffer;
}
}