# 2677. Chunk Array
###### tags: `leetcode 30 days js challenge` `Easy`
[2677. Chunk Array](https://leetcode.com/problems/chunk-array/)
### 題目描述
Given an array `arr` and a chunk size `size`, return a **chunked** array. A **chunked** array contains the original elements in `arr`, but consists of subarrays each of length `size`. The length of the last subarray may be less than `size` if `arr.length` is not evenly divisible by `size`.
You may assume the array is the output of `JSON.parse`. In other words, it is valid JSON.
Please solve it without using lodash's `_.chunk` function.
### 範例
**Example 1:**
```
Input: arr = [1,2,3,4,5], size = 1
Output: [[1],[2],[3],[4],[5]]
Explanation: The arr has been split into subarrays each with 1 element.
```
**Example 2:**
```
Input: arr = [1,9,6,3,2], size = 3
Output: [[1,9,6],[3,2]]
Explanation: The arr has been split into subarrays with 3 elements. However, only two elements are left for the 2nd subarray.
```
**Example 3:**
```
Input: arr = [8,5,3,2,6], size = 6
Output: [[8,5,3,2,6]]
Explanation: Size is greater than arr.length thus all elements are in the first subarray.
```
**Example 4:**
```
Input: arr = [], size = 1
Output: []
Explanation: There are no elements to be chunked so an empty array is returned.
```
**Constraints**:
- `arr is a valid JSON array`
- 2 <= `JSON.stringify(arr).length` <= 10<sup>5</sup>
- `1 <= size <= arr.length + 1`
### 解答
#### TypeScript
`slice` 解
```typescript=
function chunk<T = unknown>(arr: T[], size: number): T[][] {
const chunksCount = Math.ceil(arr.length / size);
const chunkedArray: T[][] = [];
for (let i = 0; i < chunksCount; i++) {
chunkedArray.push(arr.slice(i * size, i * size + size));
}
return chunkedArray;
}
```
> [name=Sheep][time=Thur, May 25, 2023]
#### TypeScript
`reduce` 解
```typescript=
function chunk<T = unknown>(arr: T[], size: number): T[][] {
return arr.reduce((chunkedArray: T[][], currentElement, index) => {
const chunkIndex = Math.floor(index / size);
if (!chunkedArray[chunkIndex]) {
chunkedArray[chunkIndex] = [];
}
chunkedArray[chunkIndex].push(currentElement);
return chunkedArray;
}, []);
}
```
> [name=Sheep][time=Thur, May 25, 2023]
### Reference
[回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)