我试图在javascript中创建一个二维数组。 (实际上,代码是用typescript编写的,将用于使用Angular2设置DOM元素的样式,但就我而言,在这种情况下它不会对结果产生任何影响。)
第一种方式:
arrayi = Array(10).fill(Array(20).fill(-1))
第二种方式:
array = [];
for(var i: number = 0; i < 10; i++) {
array[i] = [];
for(var j: number = 0; j< 20; j++) {
array[i][j] = -1;
}
}
如果我调用array[1][2] = 2;
它会达到我的预期,这意味着将二维数组中的一个元素设置为2。
但是,如果我致电arrayi[1][2] = 2;
,则每个元素arrayi[x][2]
都会设置为2.(使用x元素{0,1,2,...,9})
为什么?我不明白。如果有人可以向我解释,那就太好了。
数组在typescript中定义为array: number[][]
和arrayi: number[][]
。
答案 0 :(得分:5)
arrayi = Array(10).fill(Array(20).fill(-1))
填充相同的数组。
你甚至可以像这样重写它
const arr1 = Array(20).fill(-1)
const arrayi = Array(10).fill(arr1)
console.log(arrayi.every(item => item === arr1)) //true
答案 1 :(得分:1)
原因是您创建了一个包含20个元素的数组实例,并将此单个实例放入根数组的每个元素中