最近打算去研究下lodash的源码,准备把大部分方法都实现一遍。先自己写,然后在对照源码。
第一个是 chunk
将数组(array)拆分成多个 size 长度的区块,并将这些区块组成一个新数组。 如果array 无法被分割成全部等长的区块,那么最后剩余的元素将组成一个区块
下面是自己实现的方法
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)得到新数组的长度,这个想法是一样的
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。