Skip to content

slidingWindow

Edit

Creates overlapping fixed-size windows from an array.

slidingWindow.ts
/** 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;
};
Terminal
wget -O src/lib/slidingWindow.ts https://raw.githubusercontent.com/jrTilak/lazykit/HEAD/registry/functions/slidingWindow.ts
slidingWindow.example.ts
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 to 1.