# 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)