首页 > 解决方案 > 分块算法帮助 JS

问题描述

在 JS 中进行一些初学者算法练习。我不明白“如果”语句中的“分块”是如何工作的。

我的主要困惑是在迭代到第二个值之后;因为在第一次运行中,它满足最后未定义的标准;所以“1”推入分块变量。因此,一旦第二个变量 2 出现,由于现在定义了 last 并且 Last 的长度不等于“len”参数,它将转到 else 部分。2 将被推入“last”,它会形成 last =“[1],2”?

然后,当第三个值 (3) 开始出现时,我就更加困惑了。if 语句的 chunked.push([number]) 如何知道当 number 也是 3 时将 [1],2 准确推送到 chunked 中?是不是省略了3?我知道 last 的长度在这一点上遇到了 len 但它是如何从 [1],2 到块 [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))

标签: javascriptarraysconstantschunking

解决方案


一个关键的见解可能chunked是数组数组。

在示例中,在第二次迭代中,chunked将不是[1],而是[[1]]。请注意,它是一个数组的数组。因此,然后last被分配内部唯一的子数组chunked,即[1],并且在else块中,值 2 被附加到该子数组,所以它变成[1, 2]。因为last真的位于里面的子数组chunkedchunked现在看起来像这样:[[1, 2]]

在下一次迭代中,值为 3,if条件为真,因为 nowlast[1, 2],因此具有所需的长度 2。此时 的值last保持不变。这个子阵列现在是“满的”。一个的子数组被附加到chunked,所以它看起来像[[1, 2], [3]]

在下一次迭代中,值为 4,现在last将被分配更新的子数组,即[3]. 所以它继续......


推荐阅读