TilesArray.tiles输出错误,警告(TilesArray.array);给我带有随机数的正确输出,但最后TilesArray.tiles在每个索引中都有相同的数组。
for (i = 0; i < 200; i++) {
for (j = 0; j < 200; j++) {
TilesArray.array[j] = (Math.round(Math.random() * 499 + 1));
}
alert(TilesArray.array);
TilesArray.tiles[i] = TilesArray.array;
}
解决此问题的任何解决方案?
答案 0 :(得分:4)
您需要复制数组。可以使用slice()
for (i = 0; i < 200; i++) {
for (j = 0; j < 200; j++) {
TilesArray.array[j] = (Math.round(Math.random() * 499 + 1));
}
alert(TilesArray.array);
TilesArray.tiles[i] = TilesArray.array.slice(0);
}
答案 1 :(得分:3)
您不断向相同数组添加引用到tiles
。要解决这个问题,请在外部循环的每次迭代中创建一个新数组:
for (i = 0; i < 200; i++) {
TilesArray.array = []; // This is the line
for (j = 0; j < 200; j++) {
TilesArray.array[j] = (Math.round(Math.random() * 499 + 1));
}
alert(TilesArray.array);
TilesArray.tiles[i] = TilesArray.array;
}
还是更好?将所有内容直接添加到tiles
数组中(这是一个不用担心的变量):
for (i = 0; i < 200; i++) {
TilesArray.tiles[i] = [];
for (j = 0; j < 200; j++) {
TilesArray.tiles[i][j] = (Math.round(Math.random() * 499 + 1));
}
}
答案 2 :(得分:1)
在每次迭代中,使用新的随机值填充TilesArray.array,并在TilesArray.tiles [i]中存储对此唯一数组的引用。但是随机值数组总是相同的。你只有很多指向同一阵列的指针。
您需要在每次迭代时分配一个新数组:
for (i = 0; i < 200; i++) {
TilesArray.array = [];
for (j = 0; j < 200; j++) {
TilesArray.array[j] = (Math.round(Math.random() * 499 + 1));
}
alert(TilesArray.array);
TilesArray.tiles[i] = TilesArray.array;
}