iT邦幫忙

2024 iThome 鐵人賽

DAY 29
0
自我挑戰組

認識JavaScript系列 第 29

[第二十九天] 試著解題 2677. Chunk Array

  • 分享至 

  • xImage
  •  

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()可以少寫很多行呢!


上一篇
[第二十八天] 牛刀小試-圖片輪播
下一篇
[第三十天] 試著解題 2722. Join Two Arrays by ID
系列文
認識JavaScript30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言