使用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
- 在循环内部,我们通过
增加k,因此它不是1
k=1
- 因此,对于第一次迭代,
- 现在进行第二次迭代
i=1,k=0
将为false,因为i%size==0
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
语句中