javascript - 分块算法帮助 JS

标签 javascript arrays constants chunking

正在用 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/

相关文章:

c - 用于频繁随机访问的数组或链表?

c++ - 为什么我可以改变 const 对象中的成员变量,这是返回 const 对象函数的结果?

java - 将报表名称存储在 Interface 、 Enum 中,还是作为报表处理程序类中的常量?

你能声明一个地址不变但元素可变的数组吗?

javascript - 将函数传递给 React 中的组件

javascript - 重置 jquery 智能向导

javascript - 带有 css 值的 jQuery/javascript if 语句

javascript - 如何在 IE9 中使用 javascript 从文件输入中获取本地文件路径?

ruby - ruby 中的 .each 迭代器是否保证每次都对相同的元素给出相同的顺序?

ios - 为什么 numberOfRowsInSection 仅针对一个部分被多次调用?