所以我有一个大小为54的三维javascript数组,4是一个布尔数组。我已将所有值初始化为false。我遇到的问题是,当我试图将单个值(例如,1)转换为true时,它会设置每个值以相同的1维结束,等于true (1,11,等等)。我还没有弄清楚这是为什么或如何发生,所以任何帮助都是值得感谢的。下面是设置数组和赋值的代码。
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]}`);
发布于 2018-08-07 16:30:14
您正在将所有内容设置为同一个数组。将有对同一个falseBoolArr数组的所有引用:
grid[i][j] = falseBoolArr;所以当你改变它的时候,变化会在任何地方反映出来。您需要使用每个循环创建一个新的数组。类似于:
for (var j = 0; j < this.maxY; j++) {
grid[i][j] = [false, false, false, false];
}如果由于某种原因需要设置falseBoolArr一次。您可以使用slice()在循环中生成显式副本。
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.slice(); // makes a copy
}
}
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]}`);
发布于 2018-08-07 16:30:45
您正在将第二个数组中的每个项设置为变量引用,而不是数组。因此,当您更改任何一个变量时,您都会更改它们,因为它们都引用了相同的变量。
不使用变量初始化,问题就消失了.
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]}`);
发布于 2018-08-07 16:32:17
不要使用变量,问题是由于变量初始化,删除falseBoolArr变量并直接在for循环中使用。
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]}`);https://stackoverflow.com/questions/51731381
复制相似问题