新阵列生成矩阵阵列的麻烦

时间:2017-10-16 06:15:31

标签: javascript arrays matrix



let arr = [[1,2,3], [4,5,6], [7,8,9]]
arr[0][1] = 'X'
arr[1][1] = 'O'

console.log(arr);




我正在尝试制作一个初步的tic-tac-toe游戏,这种创建桌子的方法对我很好。

在阅读其他方法以生成矩阵阵列表时,我发现了这个



let newArr = new Array(3).fill(new Array(3))
newArr[0][1] = 'X'

console.log(newArr)




当我尝试返回newArr时,它实际上用' X'替换了整个列。

为什么这样做?我想也许在堆栈中它识别出我正在命名一个未定义索引的值,并且更倾向于对整个列执行相同操作但我无法确认。

1 个答案:

答案 0 :(得分:1)

Array#fill获取一个对象/原语并使用它来填充所有项目。你已经在函数中给出了一个数组,array是一个引用类型,所以它对所有项使用相同的引用,但是对象是单个的。那么为什么要更新所有列。

您可以比较参考,以确保创建单个并用于所有项目。



let newArr = new Array(2).fill(new Array(2));

console.log(newArr[0] === newArr[1]);



  

要创建您想要的数组,您可以执行



let newArr = Array.from({ length: 3 }, () => new Array(3));

newArr[0][1] = 'X';

console.log(newArr);