分块算法帮助JS

问题描述 投票:0回答:1

正在做一些JS的初级算法练习。我不明白 "分块 "到了 "if "语句后是如何工作的。

我的主要困惑是在迭代到第2个值之后;因为在第一次运行时,它符合last是未定义的标准;所以 "1 "推入了分块变量。那么一旦第二个变量进来,2,由于现在last已经被定义了,而Last的长度不等于 "len "参数,所以会进入到else部分。2会被推到 "last "中,会形成last ="[1],2"?

然后,当第三个值(3),开始进来的时候,这时我就更糊涂了。if语句的chunked.push([number])怎么知道在此时number也是3的时候,准确地将[1],2推入chunked呢?是不是省略了3?我知道该点的最后一个长度满足len,但如何从[1],2制定到chunk[1,2]?

我假设3也会被推到 "last "中。

如果这听起来也很混乱,我真的很抱歉!我看了很多教程。我在网上看了很多关于解决这个同样问题的教程,但没有一处详细解释。

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))

javascript arrays const chunking
1个回答
1
投票

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

在本例中,在第二次迭代时。chunked 不会 [1][[1]]. 请注意,它是一个数组的数组。那么 last 内唯一的子数组被分配给 chunked[1],而在 else 块,值2将被追加到该子数组中,所以它变成了 [1, 2]. 因为 last 真的 中的子数组。chunked, chunked 现在看起来是这样的。[[1, 2]].

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

在下一次迭代时,该值为4,现在是 last 将被分配给较新的子数组,即。[3]. 然后继续...


0
投票

让我们来看看你的算法。分块数组被调用,有两个参数。[1,2,3,4,5,6] 和len是 2 这就是所需的块的大小。在你的函数中,一个空数组 chunked 被定义。现在函数在数组 arr.

  1. 第一次迭代;最后一次未定义,因为,chunked是空的。的 !last 条件为真,因此。[1] 被推到chunked里面。现在chunked的形状如下。[ [1] ].
  2. 现在最后一个数组的长度为1,形状如下。[1]. !last 是假的,并且 last.length === len 也是假的,因为len是2,所以,2被推入last。last的形状是 [1, 2] 而分块的形状是 [ [1, 2] ].
  3. 最后是一个大小为2的数组,形状为 [1, 2,]. if中的条件为真,因为 last.length === len. 所以,一个当前值为3的数组被推送到chunked中。现在chunked的大小是2,形状是 [ [1, 2], [3] ].
  4. 最后定义了一个大小为1的数组,形状为 [3]. 如果evaluation为false,4就会被推到last里。Last的大小为2,形状为 [3, 4]. 分块数组的大小为2,形状为 [ [1, 2], [3, 4] ].
  5. 现在,当前值是5,最后是大小为2的数组。如果条件为真,并且存在,一个值为5的数组被推送到chunked中。Chunked的大小是3,形状是 [ [1, 2], [3, 4], [5] ].
  6. Last是一个大小为1的数组,里面的值为6。如果是假的,那么6就会被推送到最后一个数组中。Last的大小为2,形状为[5,6],chunked的形状为 [ [1, 2], [3,4], [5,6] ]

这时,由于没有更多的条目,所以对数组的迭代终止,函数返回chunked,当打印时,其形状与步骤6中的chunked相同。函数简单地走过输入数组,然后复制到一个新的数组,条件是新数组中的条目都是尺寸为 len 价值从 arr 连续服用。

© www.soinside.com 2019 - 2024. All rights reserved.