使用Javascript深入解释将简单数组转换为二维数组(矩阵)的过程

使用Javascript深入解释将简单数组转换为二维数组(矩阵)的过程,javascript,Javascript,我想对我将在下面发布的函数的一个部分做一个概念性的解释 我发现了一个问题的以下解决方案: let argh = [1, 2, 3, 4, 5, 6]; function chunkArrayInGroups(arr, size) { var matrix = [], i, k; for (i = 0, k = -1; i < arr.length; i++) { if (i % size === 0) { k++;

我想对我将在下面发布的函数的一个部分做一个概念性的解释

我发现了一个问题的以下解决方案:

let argh = [1, 2, 3, 4, 5, 6];


function chunkArrayInGroups(arr, size) {
    var matrix = [], i, k;

    for (i = 0, k = -1; i < arr.length; i++) {
        if (i % size === 0) {
            k++;
            matrix[k] = [];
        }

        matrix[k].push(arr[i]);

        i //returns: 0, 1, 2, 3, 4, 5
        k //returns: 0, 0, 1, 1, 2, 2
    }

    return matrix;
}

console.log(chunkArrayInGroups(argh,2))
//result: [ [ 1, 2 ], [ 3, 4 ], [ 5, 6 ] ] 
让argh=[1,2,3,4,5,6];
函数chunkArrayInGroups(arr,size){
var矩阵=[],i,k;
对于(i=0,k=-1;i
关键不在于解决方案本身,因为此函数按其应有的方式工作

我需要的是解释
k
是如何与
I
进行迭代的

如上所示,
k
返回了
0、0、1、1、2、2
。从视觉上看,我知道推入
矩阵[k]
的数字在
k
返回的每个值上以两个数字的形式分布(当
k
0
时,推送两个数字,创建一个
数组
,以此类推……)

我需要了解的是:

  • 为什么
    k
    不返回
    if
    代码返回
    true
    的次数,只返回
    0,1,2

  • 我知道每次
    k
    返回时,它都相当于将要创建的每个
    数组。每次数字重复自身时的迭代是如何转变为数字将被分配到数组中的方式的

  • 我想不起来了


    非常感谢。

    您可以通过以下步骤理解

    • 最初k是
      -1
      i=0
      • 因此,对于第一次迭代,
        i%size==0
        将为真,因为
        0%2=>0
      • 在循环内部,我们通过
        1
        增加k,因此它不是
        k=1
    • 现在进行第二次迭代
      i=1,k=0
      • i%size==0
        将为false,因为
        1%2=>1
      • 因此,我们不进入
        if
        块,
        k
        将保持为
        1

    无论任何条件如何,i都会增加,所以在每次迭代中,都会看到增加
    1


    为什么k不返回if代码运行的次数 返回true,只返回0,1,2

    如果您在外部打印,它不取决于
    If
    语句返回true的次数,它会打印
    k
    的值,如果只需要在返回true时打印,您可以在
    If
    内部添加控制台



    在pc或firefox上使用基于谷歌的浏览器。点击F12。现在你可以追踪它的功能了。通过Array.push()函数的文档还可以一步一步地找到一点知识。如果你在这里问得很聪明,你也可以(自己负担得起)追踪到这件事。
    k
    i
    @Bravo的迭代次数增加一次。
    i
    @Bravo我明白了……谢谢你的解释。你是我怀疑的核心。因此,无论在
    if
    语句的每次迭代中该语句是否为真,它都会增加?不,
    k
    在if语句为真时增加,换句话说,当
    i
    大小的倍数时(包括0),谢谢您的回答。我知道在这种情况下,
    k
    将从
    -1
    增加到
    2
    ,创建
    3
    数组。我仍然想理解的是,为什么
    k
    返回的长度等于我上面发布的块代码上的
    I
    。当
    if
    false
    k
    不会增加,但会重复其自身,加起来与
    i
    的长度相同。我不明白。在代码块的这一部分中,
    k
    的结果是一种可视的方式,可以看到
    [i]
    被推入
    矩阵[k]
    @Alioshr的分布,因为您在这些值上迭代了
    arr.length-1
    ,因此,如果您操控任何
    arr.length-1
    time将仅显示
    arr.length-1
    time,因为loggin不在条件块中,所以它不关心
    k
    的值是否与last相同。如果您需要
    k
    成为
    0,1,2
    ,则将其记录在
    if
    语句中