如何在二维javascript数组中设置一个值

如何在二维javascript数组中设置一个值,javascript,arrays,Javascript,Arrays,我试图在二维数组中设置一个值,但它不起作用 考虑以下代码,这些代码取自该主题的许多示例: // create a 3x3 array with -1 in every position: let a = new Array(3).fill(new Array(3).fill(-1)) console.log(`a: ${JSON.stringify(a)}`) a[1][2] = 0 console.log(`a: ${JSON.stringify(a)}`) 结果如下: a: [[-1,-1

我试图在二维数组中设置一个值,但它不起作用

考虑以下代码,这些代码取自该主题的许多示例:

// create a 3x3 array with -1 in every position:
let a = new Array(3).fill(new Array(3).fill(-1))
console.log(`a: ${JSON.stringify(a)}`)
a[1][2] = 0
console.log(`a: ${JSON.stringify(a)}`)
结果如下:

a: [[-1,-1,-1],[-1,-1,-1],[-1,-1,-1]]
a: [[-1,-1,0],[-1,-1,0],[-1,-1,0]]
我们可以看到,它没有设置单个单元格,而是将数组中的3个位置设置为0,即设置[0][2]和[1][2]以及[2][2]=0。很奇怪

我试过这个:

let a = new Array(3).fill(new Array(3).fill(-1))
console.log(`a: ${JSON.stringify(a)}`)
a[1,2] = 0
console.log(`a: ${JSON.stringify(a)}`)
这就产生了更奇怪的结果:

a: [[-1,-1,-1],[-1,-1,-1],[-1,-1,-1]]
a: [[-1,-1,-1],[-1,-1,-1],0]
我疯了,还是javascript不支持在二维数组中设置值?

第一个问题: 这是因为您使用相同的子阵列填充外部阵列
a[0]
a[1]
a[2]
都是相同的数组!因为在JS中,对象(包括数组)是使用它们的引用传递的!
array.fill
所做的是获取一个parrameter(在本例中是对数组的引用)并将其分配给数组中的每个项目。是这样的:

var sub=新数组(3);
分项填料(-1);
var a=[];
a[0]=sub;
a[1]=子类;
a[2]=子类;
a[0][1]=0;
console.log(sub);//也更改了
第一个问题: 这是因为您使用相同的子阵列填充外部阵列
a[0]
a[1]
a[2]
都是相同的数组!因为在JS中,对象(包括数组)是使用它们的引用传递的!
array.fill
所做的是获取一个parrameter(在本例中是对数组的引用)并将其分配给数组中的每个项目。是这样的:

var sub=新数组(3);
分项填料(-1);
var a=[];
a[0]=sub;
a[1]=子类;
a[2]=子类;
a[0][1]=0;

console.log(sub);//也更改了
您正在使用相同的引用填充数组新数组(3)。在所有三行中填充(-1),因此对其中一行的任何更改都将反映在所有位置

尝试:

var a=新数组(n);
对于(变量i=0;i
您正在使用相同的引用填充数组新数组(3)。在所有三行中填充(-1),因此对其中一行的任何更改都将反映在所有位置

尝试:

var a=新数组(n);
对于(变量i=0;i
@JohnLittle我也为你的第二个问题添加了一些解释!刚刚看到了!不客气@约翰利特尔:我也为你的第二个问题添加了一些解释!刚刚看到了!不客气!
var a = new Array(n);
for (var i = 0; i < n; i++) {
  a[i] = new Array(n);
}
//where n = 3 for your case.