JavaScript数组的问题
TilesArray.tiles的输出错误,警报(TilesArray.array);使用随机数提供正确的输出,但在末尾TilesArray.tiles在每个索引中具有相同的数组JavaScript数组的问题,javascript,Javascript,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(TilesArra
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;
}
(i=0;i<200;i++)的{
对于(j=0;j<200;j++){
TilesArray.array[j]=(Math.round(Math.random()*499+1));
}
警报(TilesArray.array);
TilesArray.tiles[i]=TilesArray.array;
}
有解决方案吗?您需要复制阵列。可以使用
slice()完成
(i=0;i<200;i++)的{
对于(j=0;j<200;j++){
TilesArray.array[j]=(Math.round(Math.random()*499+1));
}
警报(TilesArray.array);
TilesArray.tiles[i]=TilesArray.array.slice(0);
}
您正在不断地将一个引用添加到相同的数组中,以平铺
。要解决此问题,请在外部循环的每个迭代中创建一个新数组:
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;
}
在每次迭代中,用新的随机值填充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;
}
(i=0;i<200;i++)的{
TilesArray.array=[];
对于(j=0;j<200;j++){
TilesArray.array[j]=(Math.round(Math.random()*499+1));
}
警报(TilesArray.array);
TilesArray.tiles[i]=TilesArray.array;
}
事实上,我认为还有另一个问题,Math.random()不是真正的随机
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));
}
}
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;
}