随机化子项并在Javascript中重新分配为单独节点的子项

时间:2011-04-14 21:16:47

标签: javascript arrays

在准备我正在javscript中制作的游戏的对象时,我正在读取一个JSON对象,deckData,并将每个作为this.discard的子项追加。我正在安排一个工作,检查this.deck是否为空。如果是,那么该函数应该将作为this.discard的子元素列出的卡片阵列洗牌,然后将它们指定为this.deck的子元素。

整个过程似乎运行得相当顺利,除了我尝试分配新洗牌数组的关键行:

this.deck.children_ = this.shuffle(this.discard.children_);

我正在寻找一种解决方案,它会成功地将所有作为this.discard的子元素的元素作为this.deck的子元素附加。我意识到我还没有从这个discard中清空阵列,但是一步一步。完整的代码片段如下:

sideboard = function(game) {

    this.discard = new lime.Layer();
    this.appendChild(this.discard);
    for (var key in deckData) {
        var cardData = deckData[key];
        this.addCard(cardData);
    };

    this.mythosDeck = new lime.Layer();
    this.appendChild(this.mythosDeck);

    lime.scheduleManager.schedule(this.deckShuffler, this);
};

sideboard.prototype.deckShuffler = function() {
    if (this.deck.children_.length < 1) {
        this.deck.children_ = this.shuffle(this.discard.children_);
    }
};

sideboard.prototype.shuffle = function(array) {
    var tmp, current, top = array.length;

    if(top) while(--top) {
        current = Math.floor(Math.random() * (top + 1));
        tmp = array[current];
        array[current] = array[top];
        array[top] = tmp;
    }

    return array;
};

1 个答案:

答案 0 :(得分:2)

难道你不想只连接两个数组然后重新分配?例如:

this.deck.children_ = this.deck.children_.concat(this.shuffle(this.discard.children_));