首页 > 解决方案 > 如何访问数组中的数组

问题描述

我正在开发 4-in-a-row 的 web 版本,并将图块存储为一个大数组,其中包含代表行的数组: 在此处输入图像描述

但是当我运行例如这个时:

data[4][5]=1

所有第 5 个值都更改为 1,而我只想将第 4 个数组的第 5 个值更改为 1

有人可以帮忙吗?

标签: javascriptarrays

解决方案


问题在于数组的创建方式。

您可能有data[0], data[1], ...data[6]都引用了同一个数组。您可以轻松检查它:

data[0] === data[1] // will be true

为每行创建 7 次新数组非常重要。

const data = [];
for (let i = 0; i < 7; i++) {
    data.push((new Array(7)).fill(0));
}

// data is
// (7) [Array(7), Array(7), Array(7), Array(7), Array(7), Array(7), Array(7)]
// 0: (7) [0, 0, 0, 0, 0, 0, 0]
// 1: (7) [0, 0, 0, 0, 0, 0, 0]
// 2: (7) [0, 0, 0, 0, 0, 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]
// 6: (7) [0, 0, 0, 0, 0, 0, 0]

data[4][5]=1
// data becomes
// (7) [Array(7), Array(7), Array(7), Array(7), Array(7), Array(7), Array(7)]
// 0: (7) [0, 0, 0, 0, 0, 0, 0]
// 1: (7) [0, 0, 0, 0, 0, 0, 0]
// 2: (7) [0, 0, 0, 0, 0, 0, 0]
// 3: (7) [0, 0, 0, 0, 0, 0, 0]
// 4: (7) [0, 0, 0, 0, 0, 1, 0]
// 5: (7) [0, 0, 0, 0, 0, 0, 0]
// 6: (7) [0, 0, 0, 0, 0, 0, 0]

// checking
data[0] === data[1] // false

推荐阅读