力扣刷题:分块数组

190 阅读2分钟

前言:锻炼自己的思想,规范自己的编程思路。

问题:

给定一个数组 arr 和一个块大小 size ,返回一个 分块 的数组。分块 的数组包含了 arr 中的原始元素,但是每个子数组的长度都是 size 。如果 arr.length 不能被 size 整除,那么最后一个子数组的长度可能小于 size 。

你可以假设该数组是 JSON.parse 的输出结果。换句话说,它是有效的JSON。

请你在不使用 lodash 的函数 _.chunk 的情况下解决这个问题。

示例:(放代码里面)

输入:arr = [1,2,3,4,5], size = 1
输出:[[1],[2],[3],[4],[5]]
解释:数组 arr 被分割成了每个只有一个元素的子数组。

思路:

代码定义了一个名为 chunk 的函数,它接受两个参数:一个数组arr 和一个块大小size。

在函数内部首先创建了一个空数组result,用于后面存储分块后的数组。

然后,我们使用一个循环来遍历数组。在每次迭代中,我们使用slice 方法来获取数组中从当前索引开始,长度为 size 的子数组,并将其添加到结果数组中。

如果arr.length 不能被 size 整除,那么最后一个子数组的长度可能小于size。这是因为slice 方法会返回从开始索引到结束索引(不包括结束索引)之间的子数组。如果结束索引大于数组的长度,那么slice 方法会返回从开始索引到数组末尾的子数组。

最后,我们返回结果数组。

function chunk(arr, size) {
  let result = [];
  for (let i = 0; i < arr.length; i += size) {
    result.push(arr.slice(i, i + size));
  }
  return result;
}

执行结果如下图:

image-20230608150149832.png

结论:

通过这个题我学习到了如何使用slice 方法来获取数组中的子数组。

复习了如何使用 push 方法向数组中添加元素。