_.chunk(array, [size=1])
- array(Array):需要被处理的数组。
- [size=1](number): 每个块的长度。
将array拆分成多个size长度的块,把这些块组成一个新数组。 如果array无法被分割成全部等长的块,那么最后剩余的元素将组成一个块。
function chunk(array, size) {
/*
* max() 方法可返回两个指定的数中带有较大的值的那个数。
* 所以这里用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
}
// >>>的意思是二进制右移一位 比如 2 >>> 1 === 1
// 2 的二进制为 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
}