Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.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 为什么多次调用Array.fill会影响未引用的数组?_Javascript_Arrays - Fatal编程技术网

Javascript 为什么多次调用Array.fill会影响未引用的数组?

Javascript 为什么多次调用Array.fill会影响未引用的数组?,javascript,arrays,Javascript,Arrays,在使用Javascript实例化数组的不同方法时,我注意到了一些有趣的行为: matrix = Array(3).fill(Array(3).fill(0)) 创建包含0个值的NxN矩阵 [ [0,0,0], [0,0,0], [0,0,0] ] 然后我尝试将矩阵的第一行全部更改为1: matrix[0].fill(1) 出于某种原因,将矩阵中的所有值都转换为1: [ [1,1,1], [1,1,1], [1,1,1] ] 这种行为对我来说毫无意义。对Array.

在使用Javascript实例化数组的不同方法时,我注意到了一些有趣的行为:

matrix = Array(3).fill(Array(3).fill(0))
创建包含0个值的NxN矩阵

[
  [0,0,0],
  [0,0,0],
  [0,0,0]
]
然后我尝试将矩阵的第一行全部更改为1:

matrix[0].fill(1)
出于某种原因,将矩阵中的所有值都转换为1:

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

这种行为对我来说毫无意义。对Array.fill的最终调用不应该只影响第一行吗?这是怎么回事?

您的代码相当于

let row = [0,0,0]
let matrix = [row, row, row];
row.fill(1);
因为
.fill(Array(3).fill(0))
调用
Array(3).fill(0)
一次以获取填充值-如果fill参数是回调,则它将为矩阵中的每个项调用它-但fill参数是一个值

在javascript中,数组被称为引用

var a = [1,2,3], b=a;
b[0] = 4
将导致
a
b
引用具有值的数组
[4,2,3]

因此,由于每个
行都是相同的数组,因此您的结果如您所见

试试这个

const matrix=Array.from({length:3},()=>Array(3.fill(0))
矩阵[0]。填充(1);

控制台日志(矩阵)必须是内部数组都相同吗
matrix[0]===matrix[1]
必须等于true。因为要用对同一数组的引用填充数组3次-请尝试
matrix=array。从({length:3},()=>array(3)。填充(0))
改为调用
array(3)。每次填充(0)
,为每一行创建一个新数组有一个>问题,我有一种感觉,它与此类似。谢谢你的详细解释!