JavaScript数组的问题

时间:2011-02-03 09:05:36

标签: 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(TilesArray.array);
    TilesArray.tiles[i] = TilesArray.array;
}

解决此问题的任何解决方案?

3 个答案:

答案 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;
}