Javascript:如何初始化二维数组

时间:2018-03-19 00:50:12

标签: javascript arrays

我认为初始化多维数组很容易:

row = Array(4).fill(0)
block = Array(4).fill(row)
block[2][2] = 15

但是这只创建了一行4次,所以如果我指定block [2] [2] = 15,那么整个列就是15。

(4) [Array(4), Array(4), Array(4), Array(4)]
0:(4) [0, 0, 15, 0]
1:(4) [0, 0, 15, 0]
2:(4) [0, 0, 15, 0]
3:(4) [0, 0, 15, 0]

我尝试Array(4).fill(Array(4).fill(0)),但结果相同。

2 个答案:

答案 0 :(得分:2)

您可以编写辅助函数来初始化二维数组。例如:

const grid = (r, c) => Array(r).fill(null).map(r => Array(c).fill(null));

const g = grid(4, 4);
g[2][2] = 15;

console.log(g);

答案 1 :(得分:0)

这实际上很难解决。我更喜欢fubar接受的答案 - 但我认为我会增加另一种可能性。

Pro:不会混淆您正在处理数组(与接受的答案一样)。

Con:难以阅读。

var row = new Array(4).fill(0)
var block = new Array(4).fill(0).map(v => deepClone(row))
block[2][2] = 15
console.log(block);

function deepClone(array){return JSON.parse(JSON.stringify(array));}

这是如何工作的?在使用空值填充数组后,.map现在可以迭代每个值并替换值。在这种情况下,由于值得信赖的JSON.parse,它是行的一个黑客深刻的克隆。