在 3D 数组中设置一个值会改变其他值

2024-01-05

我正在用 0 一行初始化一个 2x2 3D 数组:

let matrix = new Array(2).fill(new Array(2).fill(0));

这导致

[[0,0], [0,0]]

Doing matrix[0][0] = 1结果是:

[[1, 0],[1, 0]] 

这里发生了什么?为什么两者都是0-th索引被设置为1?


The fill() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/fill方法用静态值填充数组中从起始索引到结束索引的所有元素。

在你的情况下let matrix = new Array(2).fill(new Array(2).fill(0));, the new Array(2).fill(0)评估一次,它的引用将提供给所有外部数组。因此,每个外部数组都引用相同的内部数组。因此,修改一个值就是更新所有其他值。

您需要为每一行创建不同的新数组引用。下面的代码为每个索引创建一个新的内部数组。

let matrix = Array.from({length: 2}, _ => new Array(2).fill(0));
console.log(matrix);
matrix[0][0] = 1;
console.log(matrix);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 3D 数组中设置一个值会改变其他值 的相关文章

随机推荐