我的代码中得到奇怪的结果。
function myFunction() {
var arrT = new Array(2)
arrT.fill('-');
var arrR = new Array(4);
arrR.fill(arrT);
console.log(arrR); // returns [ [ '-', '-' ], [ '-', '-' ], [ '-', '-' ], [ '-', '-' ] ]
arrR[0][1]='xxx'
console.log(arrR); // returns [ [ '-', 'xxx' ], [ '-', 'xxx' ], [ '-', 'xxx' ], [ '-', 'xxx' ] ]
}
我需要一个预填充的2D数组(这里我将其定义为固定的,但通常会计算尺寸) 我以为我使用了fill方法,它似乎工作正常。 但是当我尝试在一个单元格中输入一个值时,所有行都被填充。
我做错了什么?我希望有[['-','xxx'],['-','-'],['-','-'],['-','-']]
在此先感谢
Filip
答案 0 :(得分:1)
如果用数组arrR
填充数组arrT
,则arrR
的所有元素将是arrT
,而不是数组arrT
的副本。将.map
与.slice()
一起使用以进行复制:
var arrT = new Array(2)
arrT.fill('-');
var arrR = new Array(4).fill(null).map(_=>arrT.slice());
console.log(arrR); // returns [ [ '-', '-' ], [ '-', '-' ], [ '-', '-' ], [ '-', '-' ] ]
arrR[0][1]='xxx'
console.log(arrR); // returns [ [ '-', 'xxx' ], [ '-', '-' ], [ '-', '-' ], [ '-', '-' ] ]