# Chunk Array 陣列切割
"Chunk Array" 是一個用於將一個大的數組(或列表)拆分成多個較小的數組的常見操作(如:將大數據集分成更小的塊),以便更容易處理或顯示。
拆分成多個較小的數組有助於:
1. 批處理數據:當你需要處理大量數據時,拆分成較小的塊可以幫助你進行批處理,以防止內存問題或提高性能。
2. 分頁顯示數據:在網頁應用程序中,如果你有大量的數據要顯示給用戶,你可以將數據拆分成多個頁面或分頁,以實現更好的用戶體驗。
3. 并行處理:在多線程或多進程環境中,拆分數據可以幫助實現並行處理,提高處理速度。
4. 壓縮或存儲數據:某些數據存儲或壓縮算法可能需要將數據分成較小的塊,以實現更好的壓縮率或管理。
實現 "Chunk Array" 操作通常涉及遍歷原始數組,然後將數據分成指定大小的塊。
每個塊都可以是一個新的數組或列表,包含原始數組中的一部分數據。
這樣,你可以獨立處理每個塊,而不需要處理整個大數組。
## Lodash函式庫中的`_.debounce()`
`lodash` 的 `_.chunk` 函數是用來拆分數組(或類似數組的對象)成多個較小的數組的工具,
有助於簡化代碼、使得拆分數組變得容易,特別在需要將大數據集分成更小的塊以便處理時。
```javascript
_.chunk(array, size);
```
- `array`:要拆分的數組或類似數組的對象。
- `size`:每個子數組的大小,即每個拆分的子數組包含多少個元素。
**返回值:**
`_.chunk` 函數返回一個包含較小數組的新數組,其中每個子數組包含指定大小的元素。
### 使用方式
示例中`_.chunk` 函數將 `array` 拆分成了三個子數組,每個子數組包含三個元素。
`chunkedArray` 的值將是 `[[1, 2, 3], [4, 5, 6], [7, 8, 9]]`。
```javascript
const _ = require('lodash');
const array = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const chunkedArray = _.chunk(array, 3);
console.log(chunkedArray);
```
## 簡化原理
### LeetCode 2677
Chunk Array
給定一個數組“arr”和一個塊大小“size”,返回一個分塊數組。
分塊數組包含“arr”中的原始元素,但由每個長度為“size”的子數組組成。
如果“arr.length”不能被“size”整除,則最後一個子數組的長度可能小於“size”。
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`.
您可以假設該數組是 JSON.parse 的輸出。 換句話說,它是有效的 JSON。
You may assume the array is the output of JSON.parse.
In other words, it is valid JSON.
請在不使用 lodash 的 `_.chunk` 函數的情況下解決它。
Please solve it without using lodash's `_.chunk` function.
#### 解決方案
1.給定一個數組“arr”和一個chunk size“size”,返回一個chunk數組。
```javascript
const chunk = function(arr,size){
let chunkedAry = [];
//chunk分組邏輯
return chunkedAry;
}
```
2.分塊數組包含“arr”中的原始元素,但由每個長度為“size”的子數組組成。
如果“arr.length”不能被“size”整除,則最後一個子數組的長度可能小於“size”。
2-1.在傳寫chunk分組邏輯之前,先試想input和output結果
=> arr=[1,2,3,4,5,6,7,8]
=> size=3
=> chunkAry=[[1,2,3],[4,5,6],[7,8]]
3.使用for迴圈遍歷`arr`,根据索引值進行分組處理
```javascript
const chunk = function(arr,size){
let chunkedAry = [];
//chunk分組邏輯
for(let i=0;i<arr.length;i+=1){
//在chunkAry先建置[]空陣列
if(i%size===0){
chunkedAry.push([]);
}
//push arr的原始元素 以進行分組
//在i=0的時候透過if判斷已在chunkAry中新增空陣列[ ]
//因此i=0會是 chunkAry[0].push(arr[0]);
//因此i=1會是 chunkAry[0].push(arr[1]);
//因此i=2會是 chunkAry[0].push(arr[2]);
//因此i=3會是 chunkAry[1].push(arr[3]);
//因此i=4會是 chunkAry[1].push(arr[4]); ..類推
chunkedAry[chunkedAry.length - 1].push(arr[i]);
}
return chunkedAry;
}
```