Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript数组的问题_Javascript - Fatal编程技术网

JavaScript数组的问题

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

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;
}
(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;
}