代码之家  ›  专栏  ›  技术社区  ›  user1187135

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

  •  0
  • user1187135  · 技术社区  · 14 年前

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

    其想法是随机生成一个x,y坐标,并将其放入数组[x],数组[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 回复  |  直到 14 年前
        1
  •  0
  •   Germann Arlington    14 年前

    看起来您的问题是由正在初始化的随机数组元素引起的。
    您可以迭代所有行和列,也可以只复制初始化元素

    您可以在其他地方存储初始化元素的列表/数组(数组元素maxRow+1/maxCol+1?)

        2
  •  0
  •   user1187135 user1187135    14 年前

    以下是解决方案:

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