为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript 多维数组完成列获取集

Javascript 多维数组完成列获取集

月关宝盒 2022-09-11 20:14:43
我正在尝试用爪哇脚本制作一个游戏。游戏板初始化为零填充的 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))


查看完整回答
反对 回复 2022-09-11
  • 1 回答
  • 0 关注
  • 70 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信