我认为初始化多维数组很容易:
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))
,但结果相同。
答案 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
,它是行的一个黑客深刻的克隆。