首页 > 解决方案 > JavaScript - 算法练习 - 将数组分成小部分

问题描述

我有这个算法练习,将一个数组分成更小的部分。这工作正常,但我不明白操作。有人可以更详细地向我解释一下。请。

const letters = ['a', 'b', 'c', 'd', 'e']

function chunk(array, size) {
  const chunked = [];

  for (let element of array) {
    const last = chunked[chunked.length - 1]

    if (!last || last.length === size) {
      chunked.push([element])
    } else {
      last.push(element)
    }
  }

  return chunked;
}


console.log(chunk(letters, 2))

它返回:

['a','b']
['c'.'d']
['e']

在本例中为数字 2 的参数在函数中传递,是每个数组包含的项目数。

console.log(chunk(letters, 2))

我不明白它生成了 2 个数组“chunked”和“last”,最后只返回“chunked”。但我不明白 2 个数组之间的联系:'chunked' 和 'last'

标签: javascript

解决方案


您正在创建一个数组数组。外部数组称为chunked。该last数组是到目前为止的最后一个内部数组。chunked好像:

[[/*some values*/], [/*some values*/], [/* this is last */]]

这就是这条线正在做的事情:

const last = chunked[chunked.length - 1] // get the final child array in chunked

然后,您决定是将当前值推入此子数组还是添加新子数组。这个选择取决于长度last是否小于块大小——换句话说,它是否已满。这就是这个测试正在做的事情:

if (!last || last.length === size) 

!last部分用于检查是否存在数组,因为在第一次last迭代时它还不存在——外部数组为空。

对于它的价值,它可能更容易理解,您只需使用一个按块大小递增的简单循环:

const letters = ['a', 'b', 'c', 'd', 'e']

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


console.log(chunk(letters, 2))


推荐阅读