Spaces:
Running
Running
/** | |
* Chunk array into arrays of length at most `chunkSize` | |
* | |
* @param chunkSize must be greater than or equal to 1 | |
*/ | |
export function chunk<T extends unknown[] | string>(arr: T, chunkSize: number): T[] { | |
if (isNaN(chunkSize) || chunkSize < 1) { | |
throw new RangeError("Invalid chunk size: " + chunkSize); | |
} | |
if (!arr.length) { | |
return []; | |
} | |
/// Small optimization to not chunk buffers unless needed | |
if (arr.length <= chunkSize) { | |
return [arr]; | |
} | |
return range(Math.ceil(arr.length / chunkSize)).map((i) => { | |
return arr.slice(i * chunkSize, (i + 1) * chunkSize); | |
}) as T[]; | |
} | |
function range(n: number, b?: number): number[] { | |
return b | |
? Array(b - n) | |
.fill(0) | |
.map((_, i) => n + i) | |
: Array(n) | |
.fill(0) | |
.map((_, i) => i); | |
} | |