有人可以向我解释为什么使用new Array()
并填充更多以相同方式生成的数组( a Matrix ),导致最终只有一个引用吗? / p>
例如,如果创建一个5x4的矩阵并用零填充它。
var matrix = new Array(5).fill( new Array(3).fill(0) )
// 0 0 0
// 0 0 0
// 0 0 0
// 0 0 0
// 0 0 0
如果更改 ONE 元素,它会影响整行,为什么?
matrix[3][1] = 5
//This is what I get
// 0 5 0
// 0 5 0
// 0 5 0
// 0 5 0
// 0 5 0
摘录
var matrix = new Array(5).fill( new Array(3).fill(0) )
console.log("matrix before...")
matrix.forEach(row => console.log(row))
matrix[3][1] = 5
console.log("matrix after...")
matrix.forEach(row => console.log(row))

答案 0 :(得分:0)
new Array(3).fill(0)
作为参数进行一次计算,并将其返回值(一个特定数组)复制到外部数组的每个元素中。你需要使用一个调用new Array(3).fill(0)
5次的循环,或者将它放在一个lambda中,该函数将为外部数组的每个元素调用lambda,例如:
Array.from(new Array(5), () => new Array(3).fill(0));
(从基思的评论中扩展而来)