一. 寫在前面:
本系列使用 lodash 4.17.4版本
這個函式的作用是用來切割陣列的,通過傳入陣列 Array 和塊數量 size 來進行陣列分割,返回新的陣列塊.
二. 函式使用示例
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++] = array.slice(index, (index += size))
}
return result
}
var ret = chunk(['a', 'b', 'c', 'd'], 2)
console.log(ret)
複製程式碼
輸出結果為:
[ [ 'a', 'b' ], [ 'c', 'd' ] ]
[Finished in 1.2s]
複製程式碼
三. 模組程式碼:
import slice from './slice.js'
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
}
export default chunk
複製程式碼
四. 對程式碼的具體解釋(以下順序是按照程式碼順序進行解釋的)
-
import slice from './slice.js'
通過 ECMAscript6新特性,引用 slice 模組。 -
function chunk(array, size) {}
(1)chunk 函式主體, 引數 array 表示原始陣列,為區域性變數;
(2)size 表示拆分後的每個新陣列長度,為區域性變數。
-
size = Math.max(size, 0)
(1)尋找 0~size 之間的最大值,並賦值給size。
(2)目的是檢查傳入的 size 值是否大於等於 0,如果 size 小於0,size 取0.
-
const length = array == null ? 0 : array.length
(1)宣告一個變數length,const 宣告的變數需要同時初始化,而且只能賦值一次, 一旦初始化後,該變數的值就不能改變;
(2) 如果 array is null, then length = 0,否則 length = array.length,這裡的條件語句用了簡寫模式,需要轉一下彎,不然容易搞錯。
-
如果 length 等於0,或者 size 小於 1 時,返回空陣列。
if (!length || size < 1) {
return []
}
複製程式碼
- 宣告塊級變數 index、 resIndex
let index = 0
let resIndex = 0
複製程式碼
-
const result = new Array(Math.ceil(length / size))
(1)建立一個新的陣列 result ,呼叫Math方法計算length / size 的值,並向上取整。
(2)給 result 陣列分配一個定長的記憶體空間。
-
當 index 小於 length 時,原陣列取 index 到 index+size 位元素,存到result陣列裡。
while (index < length) {
result[resIndex++] = slice(array, index, (index += size))
}
複製程式碼
-
return result
返回新的result陣列 -
export default chunk
預設匯出函式 chunk
五. 寫在最後:
本文章來源於午安煎餅計劃Web組 - 初見
由於本人水平有限,很多地方理解不到位,還請各位大佬指正。
相關連結: