简介
Lodash是一个一致性、模块化、高性能的 JavaScript 实用工具库。 里面封装了很多实用的方法(具体安装引入方法详见链接)。 接下来,让我们来看看他们是怎么实现的。
_.chunk(array, [size=1])
解释
将数组(array)拆分成多个 `size` 长度的区块,并将这些区块组成一个新数组。 如果`array` 无法被分割成全部等长的区块,那么最后剩余的元素将组成一个区块。
参数
array(Array) : 需要处理的数组[size=1](number) : 每个数组区块的长度
返回
(Array) : 返回一个包含拆分区块的新数组(注:相当于一个二维数组)。
例子
_.chunk(['a', 'b', 'c', 'd'], 2);
// => [['a', 'b'], ['c', 'd']]
_.chunk(['a', 'b', 'c', 'd'], 3);
// => [['a', 'b', 'c'], ['d']]
手写实现
function myChunk( arr, n ) {
let len = arr.length
if (len <= 0 ) return ; // 不为空数组
let res = [] // 存放结果
let block = [] // 每个小的区块
while( n >= 0) { // n为区分长度 不为负值
if( n >= len ) { // 区分长度大于数组长度时 传入数组全部输出
res.push(arr)
} else {
arr.forEach((item) => {
block.push(item) // 向小区块里存放数据
if (block.length === n) { // 判断小区块数组的长度 是否 等于区分长度
res.push(block) // 等于 将小区块数组传入结果数组
block = [] // 重置小区块数组
}
})
if (block.length > 0) { // 剩余的小区块不满足上一个判断条件,将其也传入结果数组
res.push(block)
}
}
return res
}
}