昨天耍廢了一天,沒有看任何一點書,今天要認真補回來。
Day21: 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.
問題難度:Easy
問題限制:
arr
is a valid JSON array2 <= JSON.stringify(arr).length <= 105
1 <= size <= arr.length + 1
我的解題過程:
題目的意思是把一個array
依照size
的大小 來分割並儲存在新的array
裡面,如果 arr.length
不能被 size
整除,則最後一個組的長度可能小於 size
。
所以我要解決的是如何讓array依照size的數值來分割。
分割的方法有slice()、splice()、split()
其中split() 是處理字串的,這次就不考慮。第一個想法就是使用**slice()**畢竟他是使用最多次的,而且不會修改掉原始資料。
我們使用的是for迴圈:
1 | for (let i = 0; i < arr.length; i+= size) {code} |
這邊考慮到size有機會不是1因此使用i+= size
來試試看。
code裡面就是要處理arr了
1 | chunked.push(arr.slice(i, size)) |
咦,錯誤…只有第一組有資料…
啊我知道了,因為size是固定的,slice的第二個參數不是數量而是位置,假如size是3因此我這樣的寫法到第二次時就會變成slice(3,3)開始位置是3但結束位置也是3的狀況。
因此只要改成:
1 | chunked.push(arr.slice(i, i + size)) |
就可以了。
我的code:
1 | var chunk = function(arr, size) { |
其他解法:
1 | const chunk = (arr, size) => |
1 | let chunk= (arr, size) =>{ |
總結:
利用寫到這題的機會再次去翻了一下關於slice()、splice()、split()的內容,剛好有些忘記這個東西!