gpt4 book ai didi

javascript - 嵌套循环中数组的意外值

转载 作者:行者123 更新时间:2023-12-03 00:36:28 24 4
gpt4 key购买 nike

在练习循环时,我收到的结果有点奇怪。

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] ]

最佳答案

基本上,您始终使用相同的a数组。

在第二次迭代开始时,a[0, 0],并且您在那里添加了 2 个额外的 0。

最后b基本上是[a, a],所以如果你继续喂a 0,它的元素就会不断增长。

如果你想创建一个二维数组,你必须做这个小修改:

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);
}

关于javascript - 嵌套循环中数组的意外值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53637256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com