我进行了此算法练习,将数组分成较小的部分。这是正确的工作,但我不了解操作。有人可以向我详细解释一下。请。
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”。但是我不明白两个数组之间的联系:“块”和“最后一个”
答案 0 :(得分:0)
您正在创建一个数组数组。外部数组称为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))
答案 1 :(得分:0)
通常有三件事:
last
包含最后一个块,它是每次迭代中新获取的,直到最后达到指定大小为止。last
达到指定大小时,chunked.push([element])
将新数组推入chunked
([element]
前面没有数组,这是用于创建一个具有单个元素的新数组-下一次迭代将是last
块,请尝试将console.log(1)
,console.log([1])
以及也许console.log([1,2])
写入JS控制台看到它们的区别。last
块尚未达到指定的大小,则仅将element
附加到其上特别是对于第一次迭代有一个“技巧”:当chunked
在开始时是一个空数组时,last = chunked[chunked.length - 1]
转换为chunked[-1]
。与许多其他语言不同,JavaScript不会在此处死亡或引发异常,它只是说给定的元素是undefined
,这是一个虚假的值并触发!last
条件,因此push([element])
事情会运行。这就是创建第一个块的方式。
答案 2 :(得分:0)
这将获取chunked
数组的最后一个元素,它可以是undefined
或最后一个块数组
const last = chunked[chunked.length - 1]
然后检查last
是undefined
还是大小为size
的数组,然后将新数组添加到带有当前元素的chunked
数组中
if (!last || last.length === size) {
chunked.push([element])
}
else,这意味着last是一个大小小于size
的数组,您将当前元素推到last
else {
last.push(element)
}
答案 3 :(得分:0)
chunk
,它带有2个参数,一个数组和块的长度chunked
数组for
循环遍历数组last
数组不是chunked
数组中的最后一个数组,也不是chunked
数组的最后一个元素等于size参数,则从array
数组中推送新元素在另一个数组中,以便形成分块数组array
数组推到chunked
数组的最后一个数组chunked
数组答案 4 :(得分:0)
或多或少:初始化一个空数组chunked
。
在循环内:查看chunked
的最后一个元素。它是不存在的,还是已经精确地要求的长度?如果是,请获取下一个字母,从中取出一个1元素的数组,并将其附加到chunked
上。如果不是,则将字母附加到chunked
的最后一个元素上。
在调试器中运行代码,设置chunked
,last
和element
的监视表达式,并观察它们发生了什么。