最近打算去研究下lodash的源码,准备把大部分方法都实现一遍。先本身写,而后在对照源码。
第一个是 chunk数组
将数组(array)拆分红多个 size 长度的区块,并将这些区块组成一个新数组。 若是array 没法被分割成所有等长的区块,那么最后剩余的元素将组成一个区块函数
下面是本身实现的方法code
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)获得新数组的长度,这个想法是同样的io