Javascript 无法设置矩阵单元格值
为什么我这样做:Javascript 无法设置矩阵单元格值,javascript,ecmascript-6,Javascript,Ecmascript 6,为什么我这样做: let matrix = Array(3).fill(new Array(3).fill(0)); matrix[0][1] = 1 我希望矩阵是: [ [0,1,0], [0,0,0], [0,0,0] ] 但相反,矩阵如下所示: [ [0,1,0], [0,1,0], [0,1,0] ] 所以它设置的是整个列,而不仅仅是单元格。我觉得我错过了这门语言中一个非常重要的部分 提前谢谢你 当您使用.fill并向其传
let matrix = Array(3).fill(new Array(3).fill(0));
matrix[0][1] = 1
我希望矩阵是:
[ [0,1,0],
[0,0,0],
[0,0,0] ]
但相反,矩阵如下所示:
[ [0,1,0],
[0,1,0],
[0,1,0] ]
所以它设置的是整个列,而不仅仅是单元格。我觉得我错过了这门语言中一个非常重要的部分
提前谢谢你 当您使用
.fill
并向其传递一个非原语(如对象或数组)时,内存中只有一个实际对象;数组将填充对同一对象的三个引用,因此当一个索引发生变化时,所有索引都会发生变化。如果要用单独的对象填充数组,则必须在创建新数组的每次迭代中显式创建它们,这可以通过数组来完成。from
:
const matrix=Array.from(
{长度:3},
()=>新数组(3).填充(0)
);
矩阵[0][1]=1;
控制台日志(矩阵)
当您使用.fill
并向其传递非原语(如对象或数组)时,内存中只有一个实际对象;数组将填充对同一对象的三个引用,因此当一个索引发生变化时,所有索引都会发生变化。如果要用单独的对象填充数组,则必须在创建新数组的每次迭代中显式创建它们,这可以通过数组来完成。from
:
const matrix=Array.from(
{长度:3},
()=>新数组(3).填充(0)
);
矩阵[0][1]=1;
控制台日志(矩阵)代码>,因为您在内存中对所有索引使用相同的引用
假设这是内存,索引指向内存中的相同值,因此,特定索引中的每次更改都会修改该值
因为您在内存中对所有索引使用相同的引用
假设这是内存,索引指向内存中的相同值,因此,特定索引中的每次更改都会修改该值
由于“外部”数组索引仅引用一个数组,因此您也可以首先用零填充初始数组,然后使用map
在每个索引处创建新数组:
let matrix=Array(3.fill(0.map)(n=>newarray(3.fill(0));
矩阵[0][1]=1;
控制台日志(矩阵)
由于“外部”数组索引仅引用一个数组,因此您也可以在开始时用零填充初始数组,然后使用map
在每个索引处创建新数组:
let matrix=Array(3.fill(0.map)(n=>newarray(3.fill(0));
矩阵[0][1]=1;
控制台日志(矩阵)代码>
new Array(3).fill(0) Matrix
+---------+ +-----------+
| [0,0,0] | <--+------| Index 0 |
+---------+ | +-----------+
^ +------| Index 1 |
| +-----------+
+---------------| Index 2 |
+-----------+
{length: 3}, () => Array(3).fill(0) Matrix
+---------+ +-----------+
| [0,0,0] | <-----------------------| Index 0 |
+---------+ +-----------+
| [0,0,0] | <-----------------------| Index 1 |
+---------+ +-----------+
| [0,0,0] | <-----------------------| Index 2 |
+---------+ +-----------+