正在用 JS 进行一些初级算法练习。我不明白当涉及到“if”语句时“分块”是如何工作的。
我的主要困惑是迭代到第二个值之后;因为在第一次运行时,它满足最后一个未定义的标准;所以“1”被插入分块变量中。因此,一旦第二个变量 2 进入,由于现在已经定义了 Last 并且 Last 的长度不等于“len”参数,它将转到 else 部分。 2 将被插入“last”,并形成last =“[1],2”?
然后,当第三个值 (3) 开始出现时,我变得更加困惑。当此时的 number 也是 3 时,if 语句的 chunked.push([number]) 如何知道将 [1],2 准确地插入 chunked 中?是不是省略了3?我知道最后一点的长度满足 len 但它是如何从 [1],2 到 block [1,2] 的公式?
我假设 3 也会被插入“最后”。
如果这听起来也令人困惑,我深表歉意!我在网上看了很多解决同样问题的教程,但没有哪里详细解释。
function chunkedArr(arr, len){
const chunked = [];
for (let number of arr){
const last = chunked[chunked.length-1]
console.log(last)
if(!last || last.length === len){
chunked.push( [number]);
} else {
last.push(number)
}
}
return chunked;
}
console.log(chunkedArr([1,2,3,4,5,6],2))
最佳答案
一个关键的见解可能是分块
是一个数组的数组。
在该示例中,在第二次迭代时,chunked
将不是 [1]
,而是 [[1]]
。请注意,它是一个数组的数组。因此,last
被分配为 chunked
内唯一的子数组,即 [1]
,以及 else
block 中,值 2 被附加到该子数组中,因此它变为 [1, 2]
。因为 last
实际上是位于 chunked
内部的子数组,chunked
现在看起来像这样: [[1, 2]]
.
在下一次迭代中,该值为 3,并且 if
条件为 true,因为现在 last
是 [1, 2]
,因此具有所需的长度 2。此时 last
的值保持不变。该子数组现在已“满”。 新子数组被附加到分块
,因此它看起来像[[1, 2], [3]]
在下一次迭代中,该值为 4,现在 last
将被分配较新的子数组,即 [3]
。就这样继续下去......
关于javascript - 分块算法帮助 JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61640890/