如何将数组拆分为块

本文旨在提供将数组拆分为更小的块的不同方法。

slice()

我们可以使用 for 循环遍历数组,同时使用 slice() 方法重复切片指定大小的块。

我们可以在每次迭代时将迭代器增加指定的大小,以便在前一个组结束后开始每个新组:

function chunkArray(array, size) {
  let result = []
  for (let i = 0; i < array.length; i += size) {
    let chunk = array.slice(i, i + size)
    result.push(chunk)
  }
  return result
}
let arr = ['a', 'b', 'c', 'd', 'e', 'f'];
let arrPairs = chunkArray(arr, 2);
console.log(arrPairs);

splice()

我们可以使用 splice() 数组方法从接收到的数组中提取指定大小的元素:

function chunkArray(array, size) {
  let result = []
  let arrayCopy = [...array]
  while (arrayCopy.length > 0) {
    result.push(arrayCopy.splice(0, size))
  }
  return result
}
let arr = ['a', 'b', 'c', 'd', 'e', 'f'];
let arrPairs = chunkArray(arr, 2);
console.log(arrPairs);

由于 splice() 元素直接更改接收到的数组,我们应该使用扩展运算符 (...) 创建一个副本,以便操作不会影响接收到的数据。

然后通过调用 push() 方法将创建的每个组添加到结果中。

使用for...of

我们可以使用 for...of 循环遍历数组,将其分成更小的块,如下所示:

function chunkArray(array, size) {
  let result = []
  for (value of array) {
    let lastArray = result[result.length - 1]
    if (!lastArray || lastArray.length == size) {
      result.push([value])
    } else {
      lastArray.push(value)
    }
  }
  return result
}
let arr = ['a', 'b', 'c', 'd', 'e', 'f'];
let arrPairs = chunkArray(arr, 3);
console.log(arrPairs);

if 语句在 for...of 循环中用于检查结果数组当前是否为空或者最后一个块是否完整。

如果完成,我们可以使用当前值创建一个新组并将其推送到结果数组中。
如果它不完整,我们可以从结果中获取最后一个数组并将当前值推入其中,直到该组完成,换句话说,如果达到所需的大小。

日期:2020-06-02 22:16:26 来源:oir作者:oir