Javascript 多维数组完成列获取集

我正在尝试用爪哇脚本制作一个游戏。游戏板初始化为零填充的 2-D 数组。但是,当我设置单个点的值时,将使用该值设置完整的列。我认为这是我初始化数组的方式的一些问题。


方法 1

# initialization

gameState = Array(6).fill(Array(7).fill(0))


# later in the game

gameState[2][4] = 1


# results in complete 4th index column to be assigned the value 1, like so -

0: (7) [0, 0, 0, 0, 1, 0, 0]

1: (7) [0, 0, 0, 0, 1, 0, 0]

2: (7) [0, 0, 0, 0, 1, 0, 0]

3: (7) [0, 0, 0, 0, 1, 0, 0]

4: (7) [0, 0, 0, 0, 1, 0, 0]

5: (7) [0, 0, 0, 0, 1, 0, 0]

方法 2

# initialization

let gameState = [];

for (let i=0; i<MAX_ROWS; i++) {

    let row = []

    for (let j=0; j<MAX_COLUMNS; j++) {

       row.push(0)

    }

    gameState.push(row);

}


# again similar assignment

gameState[2][4] = 1


# results in correct state of the array

0: (7) [0, 0, 0, 0, 0, 0, 0]

1: (7) [0, 0, 0, 0, 0, 0, 0]

2: (7) [0, 0, 0, 0, 1, 0, 0]

3: (7) [0, 0, 0, 0, 0, 0, 0]

4: (7) [0, 0, 0, 0, 0, 0, 0]

5: (7) [0, 0, 0, 0, 0, 0, 0]

有人可以解释我在这里做错了什么吗?


月关宝盒
浏览 71回答 1
1回答

子衿沉夜

你的问题很简单。Array(6).fill(Array(7).fill(0))让我们解释一下这是做什么的。Array(6)创建一个多孔数组,其中包含 6 个项目的空间。.fill(...)将用你作为论据的东西填满这6个洞。现在问题来了。在 Javascript 中,在运行函数执行之前计算参数。这意味着(在这种只运行一次的确切情况下),您的代码与以下代码完全相同:.fill(...)const&nbsp;innerArray&nbsp;=&nbsp;[0,0,0,0,0,0,0]; gameState&nbsp;=&nbsp;Array(6).fill(innerArray);这意味着它用完全相同的数组实例填充外部数组 6 次。您需要的是每次都创建单独的数组。只需执行此操作:gameState&nbsp;=&nbsp;[...Array(6)].map(()&nbsp;=>&nbsp;[...Array(7)].map(()&nbsp;=>&nbsp;0))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java