JavaScript-算法练习-将数组分成小块
我有一个算法练习,它将数组分割成更小的部分。这是正常工作,但我不理解操作。有人能给我详细解释一下吗。求你了JavaScript-算法练习-将数组分成小块,javascript,Javascript,我有一个算法练习,它将数组分割成更小的部分。这是正常工作,但我不理解操作。有人能给我详细解释一下吗。求你了 const字母=['a','b','c','d','e'] 功能块(数组、大小){ 常量块=[]; for(数组的let元素){ const last=chunked[chunked.length-1] 如果(!last | | last.length==大小){ chunked.push([元素]) }否则{ 最后。推(元素) } } 返回分块; } console.log(块(字母,2
const字母=['a','b','c','d','e']
功能块(数组、大小){
常量块=[];
for(数组的let元素){
const last=chunked[chunked.length-1]
如果(!last | | last.length==大小){
chunked.push([元素])
}否则{
最后。推(元素)
}
}
返回分块;
}
console.log(块(字母,2))
它返回:
['a','b']
['c'.'d']
['e']
在本例中,该参数是在函数中传递的数字2,它是每个数组包含的项数
console.log(chunk(letters, 2))
我不明白它生成了两个数组“chunked”和“last”,最后只返回“chunked”。但是我不理解两个数组之间的联系:“chunked”和“last”您正在创建一个数组数组。外部数组称为
chunked
。last
数组是到目前为止的最后一个内部数组<代码>分块看起来像:
[[/*some values*/], [/*some values*/], [/* this is last */]]
这条线就是这么做的:
const last = chunked[chunked.length - 1] // get the final child array in chunked
if (!last || last.length === size)
然后决定是将当前值推入该子阵列还是添加新子阵列。这个选择取决于last
的长度是否小于块大小——换句话说,它是否已满。这就是本测试的目的:
const last = chunked[chunked.length - 1] // get the final child array in chunked
if (!last || last.length === size)
!last
部分用于检查是否存在last
数组,因为在第一次迭代时它还不存在-外部数组为空
为了更好地理解它,您只需使用一个按块大小递增的简单循环:
const字母=['a','b','c','d','e']
功能块(数组、大小){
常量块=[];
for(设i=0;i console.log(chunk(字母,2))
通常有三件事:
last
包含每次迭代新获取的最后一个块,该块将一直增长,直到达到指定的大小last
达到指定大小时,chunked.push([element])
将新数组推入chunked
([element]
前面没有数组,这是一个简短的语法,用于创建一个带有单个元素的新数组-对于下一次迭代,这将是最后一个块。尝试将console.log(1)
,console.log([1])
和console.log([1,2])
写入JS控制台,查看它们的区别
最后一个
块未达到指定的大小,则只需将元素
附加到它特别是对于第一次迭代,有一个“技巧”:当
chunked
在开始时是一个空数组时,last=chunked[chunked.length-1]
转换为chunked[-1]
。与许多其他语言不同,JavaScript在这里不会消亡或抛出异常,它只是说给定的元素是未定义的
,这是一个错误的值,会触发!last
条件,从而触发推送([element])
东西将运行。这是第一个区块的创建方式。这将获得区块
数组的最后一个元素,即未定义
或最后一个区块数组
const last = chunked[chunked.length - 1]
然后检查last
是否为undefined
或是大小为size
的数组,然后使用当前元素将新数组添加到chunked
数组中
if (!last || last.length === size) {
chunked.push([element])
}
否则,这意味着last是一个大小小于size
的数组,您将当前元素推到last
else {
last.push(element)
}
chunk
,它有两个参数,一个数组和chunk的长度分块的数组
for
循环遍历数组last
数组不是chunked
数组中的最后一个数组,或者chunked
数组的最后一个元素等于size参数,则从另一个数组中的array
数组推送新元素,使其形成一个chunked数组array
array推送到chunked
array的最后一个数组chunked
数组或多或少:初始化空数组
chunked
在循环内部:查看chunked
的最后一个元素。它是不存在的,还是已经完全达到了所需的长度?如果是,则取下一个字母,从中创建一个1元素数组,并将其附加到chunked
。如果不是,则将该字母附加到chunked
的最后一个元素
在调试器中运行代码,为
chunked
、last
和element
设置监视表达式,并观察它们发生了什么。您到底不明白什么?它生成了两个数组“chunk”和“last”,最后只返回“chunked”。但我不明白“last”数组链接