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.
提供一個arr及指定的新的大小,之後回傳將arr切成指定的大小的陣列。
var chunk = function(arr, size) {
let result = [];
//每包含一個size才可以離開
for (let i = 0; i < arr.length; i+=size){
//因為是一個陣列裡面包含一個陣列, 也就是子陣列
let r = [];
for(let k = 0; k < size; k++){
//確保不要超出arr的長度
if ( i + k < arr.length){
r.push(arr[i + k]);
}
}
//推回去爸爸裡面
result.push(r);
}
return result;
};
後來看到有人是這麼寫的
var chunk = function(arr, size) {
let result = []
for(let i = 0; i<arr.length; i+= size){
result.push(arr.slice(i,i+size))
}
return result
};
slice() 是什麼?
回傳一個新陣列,是設定原先陣列的 i 至 i+size (不含size)。
所以如果是animals之後設定size=2,
會從arr.slice(0, 0+2) -> arr.slice(0, 2) -> an,
進展arr.slice(2, 2+2) -> arr.slice(2, 4) -> im,
繼續arr.slice(4, 4+2) -> al,
最後是arr.slice(6, 6+2) -> s。
因為最後沒有arr[7],所以才只有單獨一個s,
輸出結果:[[an], [im], [al], [s]]
所以slice()可以少寫很多行呢!