# 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; } ```