为什么array = Array(10).fill(Array(20).fill(-1))与数组[[-1,.., - 1],...,[ - ,..., -1]]

时间:2017-05-12 10:57:19

标签: javascript arrays typescript

我试图在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[][]

2 个答案:

答案 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个元素的数组实例,并将此单个实例放入根数组的每个元素中