如何使用slice()复制数组的数组数组

时间:2012-08-10 08:35:51

标签: javascript arrays splice

我试图用随机游戏棋子(图像)填充游戏板(8乘8),但不是整个棋盘都填满了。有些人会空着。为此,我在板上随机生成x,y坐标并为其分配一个随机数。由于fillBoard是模块中的私有函数,我将它复制到copyBoard,这是公共函数。

这个想法是随机生成一个x,y坐标并将它放在一个数组[x],array [y]中。我在复制阵列阵列时遇到了麻烦,因为并非所有这些都是定义的。我想知道你是怎么做到的?

这是我到目前为止所得到的。它显示错误,因为splice()不能用于未定义的变量。

function fillBoard(){
    var x, y;
    monsters=[]; //empty array

    x = Math.floor(Math.random()*cols);
    y = Math.floor(Math.random()*rows);

    monsters[x] = []; /* making x variable an array */
    monsters[x][y] = Math.floor(Math.random() * numMonsterTypes);
}

function copyBoard() {
    var copy = [],
        x;

    for (x = 0; x < cols; x++) {
        if(monsters[x]){
            copy[x] = monsters[x].slice(0); //slice(array) -> returns the selected elements in an array
        };
    };
    return copy;
}  

2 个答案:

答案 0 :(得分:0)

看起来您的问题仅来自于初始化的随机数组元素 您可以遍历所有行和列并仅复制初始化元素 或
你可以在其他地方存储一个列表/数组的初始化元素(数组元素maxRow + 1 / maxCol + 1?)

答案 1 :(得分:0)

以下是解决方案:

function fillBoard(){
    var x, y;
    monsters=[]; //empty array

    x = Math.floor(Math.random()*cols);
    y = Math.floor(Math.random()*rows);

    monsters[x] = []; /* making x variable an array */
    monsters[x][y] = Math.floor(Math.random() * numMonsterTypes);
}

function copyBoard() {
    var copy = [],
        x;

    for (x = 0; x<cols; x++){
        copy[x] = [];
        if(monsters[x]){
            copy[x] = monsters[x].slice(0);;
        };
    };

    return copy;
}
相关问题