slidingWindow
EditCreates overlapping fixed-size windows from an array.
/** Creates overlapping fixed-size windows from an array. */export const slidingWindow = <const T>( array: readonly T[], size: number, step: number = 1,): T[][] => { if (!Number.isSafeInteger(size) || size <= 0) { throw new RangeError("size must be a positive safe integer"); } if (!Number.isSafeInteger(step) || step <= 0) { throw new RangeError("step must be a positive safe integer"); } const values: T[] = []; for (let index = 0; index < array.length; index += 1) { if (!Object.hasOwn(array, index)) { throw new TypeError("array must not contain empty slots"); } values.push(array[index] as T); }
const result: T[][] = []; for (let index = 0; index + size <= values.length; index += step) { result.push(values.slice(index, index + size)); } return result;};Download
Section titled “Download”wget -O src/lib/slidingWindow.ts https://raw.githubusercontent.com/jrTilak/lazykit/HEAD/registry/functions/slidingWindow.tstemp_dir="$(mktemp -d)" && bunx degit jrTilak/lazykit/registry/functions "$temp_dir" && mv "$temp_dir/slidingWindow.ts" src/lib/slidingWindow.ts && rm -r "$temp_dir"Examples
Section titled “Examples”import { slidingWindow } from "./slidingWindow";
const pairs = slidingWindow([1, 2, 3, 4], 2);// [[1, 2], [2, 3], [3, 4]]array(readonly T[]) — Dense source values. Sparse arrays are rejected.size(number) — Positive safe-integer window size.step(number) — Positive safe-integer offset, defaulting to1.