Javascript 3 维数组赋值错误

标签 javascript arrays multidimensional-array

所以我有一个大小为[5][5][4]的3维javascript数组,[4]是一个 bool 数组。我已将所有值初始化为 false。我遇到的问题是,当我尝试将单个值(例如 [0][0][1])切换为 true 时,它​​将以相同 [1] 维度结尾的每个值设置为 true([0] [1][1]、[1][0][1]等)我无法弄清楚为什么或如何发生这种情况,因此感谢任何帮助。我用于设置数组和分配值的代码如下。

this.maxX = 5;
this.maxY = 5;

var grid = [];
var falseBoolArr = [false, false, false, false];

for (var i = 0; i < this.maxX; i++) {
  grid[i] = [];
  for (var j = 0; j < this.maxY; j++) {
    grid[i][j] = falseBoolArr;
  }
}
grid[0][0][0] = true
grid[0][0][1] = false
console.log(`Grid at 0,0,0 = ${grid[0][0][0]}`);
console.log(`Grid at 0,1,0 = ${grid[0][1][0]}`);
console.log(`Grid at 1,0,0 = ${grid[1][0][0]}`);
console.log(`Grid at 0,0,1 = ${grid[0][0][1]}`);

最佳答案

您将第二个数组中的每个项目设置为变量引用,而不是数组。因此,当您更改其中任何一个时,您都会更改它们,因为它们都引用相同的变量。

不使用变量进行初始化,问题就消失了...

this.maxX = 5;
this.maxY = 5;

var grid = [];

for (var i = 0; i < this.maxX; i++) {
  grid[i] = [];
  for (var j = 0; j < this.maxY; j++) {
    grid[i][j] = [false, false, false, false];
  }
}
grid[0][0][0] = true
grid[0][0][1] = false
console.log(`Grid at 0,0,0 = ${grid[0][0][0]}`);
console.log(`Grid at 0,1,0 = ${grid[0][1][0]}`);
console.log(`Grid at 1,0,0 = ${grid[1][0][0]}`);
console.log(`Grid at 0,0,1 = ${grid[0][0][1]}`);

关于Javascript 3 维数组赋值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51731381/

相关文章:

Javascript 返回不适合 UIWebView 给定宽度和高度的内容/字符串

javascript - 在没有 jQuery 的 Backbonejs 中滑出

javascript - 使用 Regex 提取 GOTO/GOSUB 的行号

c - 未初始化适当的数组元素会导致未定义的行为

javascript - 如何将数组值推送到另一个数组对象值javascript

java - 反转 int 数组的所有三位数字元素

javascript - 如何更改每个 html 表格行 Accordion

matlab - 提高许多子矩阵左除运算的性能(mldivide,\)

javascript - 检查javascript中的多维数组输入

jquery推送制作多维数组