@extra-array/cycle
Version:
Gives values that cycle through array.
21 lines (20 loc) • 523 B
JavaScript
function index(x, i = 0) {
return i < 0 ? Math.max(x.length + i, 0) : Math.min(i, x.length);
}
function concat$(x, ...ys) {
for (var y of ys)
x.push(...y);
return x;
}
function cycle(x, i = 0, n = x.length) {
var X = x.length;
if (n <= 0 || X === 0)
return [];
var i = index(x, i);
var a = x.slice(i, i + n);
n -= a.length;
for (var m = 0, M = Math.floor(n / X); m < M; m++)
concat$(a, x);
return concat$(a, x.slice(0, n % X));
}
export { cycle as default };