gpt4 book ai didi

javascript - 修改多维数组的一个索引会导致其他所有子数组发生变异?

转载 作者:行者123 更新时间:2023-12-03 06:56:30 25 4
gpt4 key购买 nike

所以,我已经像这样初始化了一个多维数组。

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/

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