_.chunk(array, [size=1])
- array(Array):需要被處理的數(shù)組。
- [size=1](number): 每個塊的長度颊亮。
將array拆分成多個size長度的塊,把這些塊組成一個新數(shù)組故硅。 如果array無法被分割成全部等長的塊蘑险,那么最后剩余的元素將組成一個塊。
function chunk(array, size) {
/*
* max() 方法可返回兩個指定的數(shù)中帶有較大的值的那個數(shù)决乎。
* 所以這里用Math.max方法是用來判斷size是否大于0队询,大于0則size = size 否則為0
* 問:為什么不用三元運算符運算方程
*/
size = Math.max(size, 0)
/*
* 三元計算 -- 如果array不存在則長度為0,否則為array的長度
*/
const length = array == null ? 0 : array.length
if (!length || size < 1) {
return []
}
let index = 0
let resIndex = 0
/*
* Math.ceil() === 向上取整
*/
const result = new Array(Math.ceil(length / size))
while (index < length) {
result[resIndex++] = baseSlice(array, index, (index += size))
}
return result
}
function baseSlice(array, start, end) {
let index = -1
let { length } = array
if (start < 0) {
start = -start > length ? 0 : (length + start)
}
end = end > length ? length : end
if (end < 0) {
end += length
}
// >>>的意思是二進(jìn)制右移一位 比如 2 >>> 1 === 1
// 2 的二進(jìn)制為 0010 右移一位等于 0001
// >>>= 的意思是右移并賦值
length = start > end ? 0 : ((end - start) >>> 0)
start >>>= 0
const result = new Array(length)
while (++index < length) {
result[index] = array[index + start]
}
return result
}