From 736877ba61be5e525f80c8e48056f74b0cfd4065 Mon Sep 17 00:00:00 2001 From: Angelos Chalaris Date: Mon, 4 May 2020 13:00:46 +0300 Subject: [PATCH] Add chunkIntoN --- snippets/chunkIntoN.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 snippets/chunkIntoN.md diff --git a/snippets/chunkIntoN.md b/snippets/chunkIntoN.md new file mode 100644 index 000000000..8009d41cf --- /dev/null +++ b/snippets/chunkIntoN.md @@ -0,0 +1,24 @@ +--- +title: chunkIntoN +tags: array,intermediate +--- + +Chunks an array into `n` smaller arrays. + +Use `Math.ceil()` and `Array.prototype.length` to get the size of each chunk. +Use `Array.from()` to create a new array of size `n`. +Use `Array.prototype.slice()` to map each element of the new array to a chunk the length of `size`. +If the original array can't be split evenly, the final chunk will contain the remaining elements. + +```js +const chunkIntoN = (arr, n) => { + const size = Math.ceil(arr.length / n); + return Array.from({ length: n }, (v, i) => + arr.slice(i * size, i * size + size) + ); +} +``` + +```js +chunkIntoN([1, 2, 3, 4, 5, 6, 7], 4); // [[1,2], [3,4], [5,6], [7]] +```