javascript - 如何访问数组中的数组
问题描述
我正在开发 4-in-a-row 的 web 版本,并将图块存储为一个大数组,其中包含代表行的数组:
但是当我运行例如这个时:
data[4][5]=1
所有第 5 个值都更改为 1,而我只想将第 4 个数组的第 5 个值更改为 1
有人可以帮忙吗?
解决方案
问题在于数组的创建方式。
您可能有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