新Array()中的指针导致问题

时间:2018-02-05 00:11:44

标签: javascript arrays pointers

有人可以向我解释为什么使用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))




1 个答案:

答案 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));

(从基思的评论中扩展而来)