- Published on
分块数组 - JavaScript 算法
说明:给定一个数组和块大小,将数组划分为许多子数组,其中每个子数组的长度为 size
。
示例:
chunk([1, 2, 3, 4], 2) --> [[ 1, 2], [3, 4]] chunk([1, 2, 3, 4, 5, 6, 7, 8], 3) --> [[ 1, 2, 3], [4, 5, 6], [7, 8]] chunk([1, 2, 3, 4, 5], 2) --> [[ 1, 2], [3, 4], [5]] chunk([1, 2, 3, 4, 5], 4) --> [[ 1, 2, 3, 4], [5]] chunk([1, 2, 3, 4, 5], 10) --> [[ 1, 2, 3, 4, 5]]
在上面的示例中, chunk()
函数中第一个参数为需要分块的数组,第二个参数为分块之后每个数组的大小。
对于第一个示例,有一个数组和一个指定的 size 大小 为 2,因此,该数组应分为 2 个元素的块。
解决方法 1:
- 创建空数组来保存称为 “chunk” 的块
- 遍历数组中的每个元素
- 检索分块数组中的最后一个元素
- 如果最后一个元素不存在,或者其长度等于块大小
- 则将新块推送到分块数组中
- 否则将当前元素添加到分块数组中的最后一个元素
function chunk(array, size) { const chunked = [] for (let char of array) { const last = chunked[chunked.length - 1] // 获取数组中的最后一个字符 if (!last || last.length === size) { // 如果最后一个元素不存在,或者其长度等于块大小 chunked.push([char]) // 将包含 char 的新块推送到分块数组 } else { last.push(char) // 将字符推送到最后一个块中 } } return chunked }
slice()
解决方法 2: 使用while 循环 和 Slice()
语法:
slice() slice(start) slice(start, end)
function chunk(array, size) { const chunked = [] let index = 0 while (index < array.length) { chunked.push(array.slice(index, index + size)) index = index + size } return chunked }