沒有看過chunk函式的內部實現,根據官方文件給出的功能自己編寫實現。
chunk函式接受兩個引數,第一引數為array型別,第二個引數為number型別,其作用的是:將陣列(array)拆分成多個 size 長度的區塊,並將這些區塊組成乙個新陣列。 如果array 無法被分割成全部等長的區塊,那麼最後剩餘的元素將組成乙個區塊。例子如下:
_.
chunk([
'a',
'b',
'c',
'd'],2
);// => [['a', 'b'], ['c', 'd']] _.
chunk([
'a',
'b',
'c',
'd'],3
);// => [['a', 'b', 'c'], ['d']]
這裡我沒有遍歷整個陣列,這樣是沒有必要的,利用aarry型別的slice函式進行優化:首先要判斷傳入函式的引數型別,如果不是array或者第二引數不是number要丟擲異常
記錄每個分割的臨時陣列的長度,用陣列的整個長度餘上要分割的數量
看這個餘數是否為0,如果不為0,做除法後要加1,這是因為我們前面要盡可能新增多的元素
這裡有個坑的點,我們最後part的值要娶乙個整數,然後除法運算子預設返回ieee754浮點數,例如:5/3返回的是1.666666667這種,要用parseint轉換為int
這樣之後,我們只要每次擷取part個值即可,只需迴圈size次就可以得到答案
(
function
(window)
let rest = arr.length % splitnum;
let newarr =
, part =
(rest ==0?
parseint
(arr.length / splitnum)
:parseint
(arr.length / splitnum +1)
);for(
let index =
0; index < splitnum; index ++
)return newarr;
} window.chunk = chunk;})
(window)
;
lodash 常用方法原始碼解析
將陣列 array 拆分成多個 size 長度的區塊,並將這些區塊組成乙個新陣列。如果array 無法被分割成全部等長的區塊,那麼最後剩餘的元素將組成乙個區塊。let newarray chunk array,2 將 array 分成兩組原理 var index 0,resindex 0,resul...
Lodash原始碼精讀 chunk slice
today 2021.3.12 lodash 原始碼 將陣列 array 拆分成多個 size 長度的區塊,並將這些區塊組成乙個新陣列。如果array 無法被分割成全部等長的區塊,那麼最後剩餘的元素將組成乙個區塊。function chunk array,size 1 let index 0let ...
lodash原始碼分析之Number
一 lodash版本 4.17.5 二 函式 1 clamp 1 定義 clamp number,lower upper 2 作用 返回加緊的數字。3 例子。const require lodash console.log clamp 10,1,20 輸出 10 console.log clamp ...