所以我有一个大小为[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/