UNPKG

@extra-array/cycle

Version:

Gives values that cycle through array.

21 lines (20 loc) 523 B
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 };