mirror of
https://github.com/denoland/std.git
synced 2024-11-21 20:50:22 +00:00
d102a10235
* refactor: import from `@std/assert` * update
57 lines
1.3 KiB
TypeScript
57 lines
1.3 KiB
TypeScript
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
|
// This module is browser compatible.
|
|
|
|
/**
|
|
* Splits the given array into chunks of the given size and returns them.
|
|
*
|
|
* @typeParam T Type of the elements in the input array.
|
|
*
|
|
* @param array The array to split into chunks.
|
|
* @param size The size of the chunks. This must be a positive integer.
|
|
*
|
|
* @returns An array of chunks of the given size.
|
|
*
|
|
* @example Basic usage
|
|
* ```ts
|
|
* import { chunk } from "@std/collections/chunk";
|
|
* import { assertEquals } from "@std/assert";
|
|
*
|
|
* const words = [
|
|
* "lorem",
|
|
* "ipsum",
|
|
* "dolor",
|
|
* "sit",
|
|
* "amet",
|
|
* "consetetur",
|
|
* "sadipscing",
|
|
* ];
|
|
* const chunks = chunk(words, 3);
|
|
*
|
|
* assertEquals(
|
|
* chunks,
|
|
* [
|
|
* ["lorem", "ipsum", "dolor"],
|
|
* ["sit", "amet", "consetetur"],
|
|
* ["sadipscing"],
|
|
* ],
|
|
* );
|
|
* ```
|
|
*/
|
|
export function chunk<T>(array: readonly T[], size: number): T[][] {
|
|
if (size <= 0 || !Number.isInteger(size)) {
|
|
throw new RangeError(
|
|
`Expected size to be an integer greater than 0 but found ${size}`,
|
|
);
|
|
}
|
|
|
|
const result: T[][] = [];
|
|
let index = 0;
|
|
|
|
while (index < array.length) {
|
|
result.push(array.slice(index, index + size));
|
|
index += size;
|
|
}
|
|
|
|
return result;
|
|
}
|