所以,我已经像这样初始化了一个多维数组。
let arr = new Array(5).fill(new Array(5).fill(0));
正在做arr[2][3] = 1;
会给我们0 0 0 0 0
0 0 0 0 0
1 1 1 1 1
0 0 0 0 0
0 0 0 0 0
为什么是这样?我猜这是一个通过引用传递的问题,这只是一个在每个后续索引中都有引用的数组,但是我正在创建一个新的,那么为什么会发生这种情况呢?let arr = new Array(5).fill(new Array(5).fill(0));
arr[2][3] = 1;
console.log(JSON.stringify(arr));
最佳答案
new Array(5).fill(0)
只需创建一个用零填充的数组。然后,您使用对同一数组的 5 个引用填充外部数组。
如果您编写等效代码,您可以更轻松地看到正在发生的事情:
let row = new Array(5).fill(0);
arr = new Array(5).fill(row);
只有一个row
数组,然后你填写 arr
与它的引用。您需要使用循环,以便为每一行创建一个新数组。
arr = [];
for (let i = 0; i < 5; i++) {
arr.push(new Array(5).fill(0))
}
关于javascript - 修改多维数组的一个索引会导致其他所有子数组发生变异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64381748/