lodash數組篇之1 chunk()

最近打算去研究下lodash的源碼,準備把大部分方法都實現一遍。先本身寫,而後在對照源碼。
第一個是 chunk數組

將數組(array)拆分紅多個 size 長度的區塊,並將這些區塊組成一個新數組。 若是array 沒法被分割成所有等長的區塊,那麼最後剩餘的元素將組成一個區塊函數

下面是本身實現的方法code

chunk:(array,size) =>{
        size = parseInt(size)
        if(size <= 0) {
            return array
        }
        let newArray =[]
        //先算出有幾個子數組,而後再根據size值從array裏面提取子數組
        let groupSize = Math.ceil(array.length/size)
        for(let i=0; i< groupSize;i++) {
            newArray.push(array.slice(i*size,(i+1)*size))
        }
        return newArray
    }

而後是lodash實現的chunk函數源碼

function chunk(array, size) {
  size = Math.max(size, 0)
  const length = array == null ? 0 : array.length
  if (!length || size < 1) {
    return []
  }
  let index = 0
  let resIndex = 0
  const result = new Array(Math.ceil(length / size))

  while (index < length) {
    result[resIndex++] = slice(array, index, (index += size))
  }
  return result
}

loadsh實現的chunk 更加嚴謹一些,對array和size作了判斷 若是數組爲空或者size < 1 就 return 出一個空數組
而後是對Math.max()的使用,原本這個方法是返回列表中的最大值,把其中一個值固定爲0,另一個不管傳什麼數字,這個方法返回的最小值都是0。
用Math.ceil(array.length/size)獲得新數組的長度,這個想法是同樣的io

相關文章
相關標籤/搜索