JavaScript嵌套循环意外结果
我希望下面的代码返回结果(矩阵) [[0,0],[0,0,0,0],[0,0,0,0,0]]JavaScript嵌套循环意外结果,javascript,nested-loops,Javascript,Nested Loops,我希望下面的代码返回结果(矩阵) [[0,0],[0,0,0,0],[0,0,0,0,0]] function zeroArray(m, n) { let newArray = []; let row = []; for (let i = 0; i < m; i++) { for (let j = 0; j < n; j++) { row.push(0); } newArray.push(row); } return
function zeroArray(m, n) {
let newArray = [];
let row = [];
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
row.push(0);
}
newArray.push(row);
}
return newArray;
}
let matrix = zeroArray(3, 2);
console.log(matrix);
函数零数组(m,n){
设newArray=[];
设row=[];
for(设i=0;i
但它的回报是:
[0,0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0]]
function zeroArray(m, n) {
let newArray = [];
let row = [];
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
row.push(0);
}
newArray.push(row);
}
return newArray;
}
let matrix = zeroArray(3, 2);
console.log(matrix);
我看不出外部循环每次迭代时,行
的[0,0,0,0,0]值是多少
我看到row
在每个实例上从[0,0]迭代到[0,0,0,0]迭代到[0,0,0,0,0],并推到newArray
。然而,这显然是错误的
有人能给我解释一下这个结果吗?你可以推送一份
行的副本。这将消除相同的对象引用
函数零数组(m,n){
设newArray=[];
设row=[];
for(设i=0;i 控制台日志(矩阵)代码>您可以推送行的副本
。这将消除相同的对象引用
函数零数组(m,n){
设newArray=[];
设row=[];
for(设i=0;i 控制台日志(矩阵)代码>对每个n值运行内部循环,然后对输出循环中的每个m值再次运行
对于M中的每个数字>运行N中的每个数字并按到第行。3*2在该表中给出了6个结果。您的内循环针对每个n值运行,然后再针对外循环中的每个m值运行
对于M中的每个数字>运行N中的每个数字并按到第行。3*2在该表中给出了6个结果。根据您的输出,内循环中的边界检查是错误的,在外循环的每次迭代中,分配一个新的i*2
长度数组
您可以使用来进一步简化代码
函数零数组(m,n){
常量newArray=[];
对于(设i=1;i根据您的输出,内循环中的边界检查是错误的,在外循环的每次迭代中分配一个新的i*2
长度数组
您可以使用来进一步简化代码
函数零数组(m,n){
常量newArray=[];
for(设i=1;i发生这种情况是因为数组是JavaScript中的引用类型(这意味着当您执行newArray.push(row)
时,您只会将引用推送到row
,因此当其值更改时,它会到处更改).好的,我明白了!我可以看出这是您需要注意的东西..按值或按引用连锁反应。我不完全知道在推入数组后引用一直保留在变量中,我认为这是新的内存空间..但显然不是。感谢发生这种情况,因为数组是JavaScript中的引用类型(这意味着当您执行newArray.push(row)
操作时,您只会将引用推送到行
,因此当其值更改时,它会到处更改).好的,我明白了!我可以看出这是你需要注意的东西..按值或按引用连锁反应.我没有完全意识到在放入数组后引用一直保留在变量中,我认为这是新的内存空间..但显然不是.谢谢