_.chunk(array, [size=1])
将数组(array)拆分成多个 size 长度的区块,并将这些区块组成一个新数组。 如果array 无法被分割成全部等长的区块,那么最后剩余的元素将组成一个区块。
参数
array (Array): 需要处理的数组
[size=1] (number): 每个数组区块的长度
返回
(Array): 返回一个包含拆分区块的新数组(注:相当于一个二维数组)。
例子
console.log(_.chunk(['a', 'b', 'c', 'd'], 2))//[['a','b'],['c','d']]
console.log(_.chunk(['a', 'b', 'c', 'd','e'], 4))//[['a', 'b', 'c', 'd'],'e']
我的实现
chunk(arr,size){
let array=[];
for (let i=0;i < Math.ceil(arr.length/size);i++) {//Math.ceil() 函数返回大于或等于一个给定数字的最小整数。
array.push(arr.slice(i*size, (i+1)*size));
}
return array
}
let arr1=["a", "b", "c", "d"]
let arr2=["a", "b", "c", "d","e"]
let arr3=[
{
id:1,
name:"小红"
},
{
id:2,
name:"小明"
},
{
id:3,
name:"小张"
}
]
console.log(this.chunk(arr1,2))//[["a", "b"], ["c", "d"]]
console.log(this.chunk(arr2,2))//[["a", "b"], ["c", "d"],["e"]]
console.log(this.chunk(arr2,6))//["a", "b", "c", "d", "e"]
console.log(this.chunk(arr3,2))//[[{id:1,name:"小红"}, {id:2,name:"小明"}],[{id:3,name:"小张"}]]
源代码
import slice from './slice.js'//裁剪数组array,从 start 位置开始到end结束,但不包括 end 本身的位置。
import toInteger from './toInteger.js'//toInteger转换 value 为一个整数。
function chunk(array, size = 1) {
size = Math.max(toInteger(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
}
console.log(_.chunk(arr1,2))//[["a", "b"], ["c", "d"]]
console.log(_.chunk(arr2,2))//[["a", "b"], ["c", "d"],["e"]]
console.log(_.chunk(arr2,6))//["a", "b", "c", "d", "e"]
console.log(_.chunk(arr3,2))//[[{id:1,name:"小红"}, {id:2,name:"小明"}],[{id:3,name:"小张"}]]