我正在尝试用爪哇脚本制作一个游戏。游戏板初始化为零填充的 2-D 数组。但是,当我设置单个点的值时,将使用该值设置完整的列。我认为这是我初始化数组的方式的一些问题。方法 1# initializationgameState = Array(6).fill(Array(7).fill(0))# later in the gamegameState[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# initializationlet 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 assignmentgameState[2][4] = 1# results in correct state of the array0: (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]有人可以解释我在这里做错了什么吗?
1 回答
子衿沉夜
TA贡献1828条经验 获得超3个赞
你的问题很简单。
Array(6).fill(Array(7).fill(0))
让我们解释一下这是做什么的。
Array(6)
创建一个多孔数组,其中包含 6 个项目的空间。
.fill(...)
将用你作为论据的东西填满这6个洞。
现在问题来了。
在 Javascript 中,在运行函数执行之前计算参数。
这意味着(在这种只运行一次的确切情况下),您的代码与以下代码完全相同:.fill(...)
const innerArray = [0,0,0,0,0,0,0]; gameState = Array(6).fill(innerArray);
这意味着它用完全相同的数组实例填充外部数组 6 次。
您需要的是每次都创建单独的数组。只需执行此操作:
gameState = [...Array(6)].map(() => [...Array(7)].map(() => 0))
添加回答
举报
0/150
提交
取消