Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法设置矩阵单元格值_Javascript_Ecmascript 6 - Fatal编程技术网

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