_.chunk(array, [size=1])
将数组(array)拆分成多个 size 长度的区块,并将这些区块组成一个新数组。 如果array 无法被分割成全部等长的区块,那么最后剩余的元素将组成一个区块。size如果未填写,默认为1。
例子:
_.chunk(['a', 'b', 'c', 'd', 'e'], 2);
// => [['a', 'b'], ['c', 'd'], ['e']]
自己实现
function chunk(arr,num){
if (num<1) return;
var newarr=[];
for(var i=0;i<arr.length/num;i++)
{
newarr.push(arr.slice(num*i,(i+1)*num))
}
return newarr;
}
_.chunk源码
import slice from './slice.js'
import toInteger from './toInteger.js'
function chunk(array, size = 1) { //默认size为1
size = Math.max(toInteger(size), 0) //size若小于0,则取值0,否则取值为size
const length = array == null ? 0 : array.length //array为null,则取值为0,否则取值为array.length
if (!length || size < 1) { //length为0或者size小于1,则返回空数组
return []
}
let index = 0
let resIndex = 0
// 用数组的长度除以size并向上取整以得到分块的个数,新建一个长度为分块个数的数组result
const result = new Array(Math.ceil(length / size))
// while循环用来遍历array数组,每次截取array中的size个元素并将截取结果添加到result数组中
// slice函数用的是lodash自己封装的方法
while (index < length) {
result[resIndex++] = slice(array, index, (index += size))
}
return result
}
总结:自己实现的时候使用了数组的两个函数:push(),slice(),并且没有写默认参数值(size=1),lodash写的循环体更加简洁。
网友评论