在练习循环时,我对结果感到有些奇怪。
let a = [];
let b = [];
for (let i=0; i<2; i++){
for (let j=0; j<2;j++){
a.push(0);
}
b.push(a);
console.log(a);
console.log(b);
}
输出看起来像这样:
//values of arrays after first iteration of outside loop
[ 0, 0 ]
[ [ 0, 0 ] ]
//values of arrays after second...
[ 0, 0, 0, 0 ]
[ [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ] ]
我想知道为什么数组b的值不等于[ [0, 0], [0, 0, 0, 0] ]
?
答案 0 :(得分:1)
基本上,您始终使用相同的a
数组。
在第二次迭代开始时,a
是[0, 0]
,您在那里再增加2个数字。
b的末尾基本上是[a, a]
,因此,如果您继续喂a
0,它的元素将会持续增长。
如果要创建2D数组,则必须进行一些小的修改:
let b = [];
for (let i=0; i<2; i++){
let a = [];
for (let j=0; j<2;j++){
a.push(0);
}
b.push(a);
console.log(a);
console.log(b);
}
将let a
的创建移到外部循环意味着每次循环时,您都会创建一个新的临时a
,随后将其推到b
。
要获得所需结果,您需要复制数组a,而不是复制它:
let a = [];
let b = [];
for (let i=0; i<2; i++){
for (let j=0; j<2;j++){
a.push(0);
}
b.push(a.slice());
console.log(a);
console.log(b);
}