更新函数返回的数组

时间:2017-01-02 17:37:35

标签: javascript arrays function

我一直在尝试使用Javascript实现一些纸牌游戏。在下面的片段中,我只想从牌组顶部拉出两张牌并将其交给玩家(简化逻辑如下)



function deck() {
    var faceCards = [['jack', 11],['queen', 12],['king', 13]];
    return faceCards;
}
function removeCard() {
    var singleCard = deck().pop();
    var faceValue = singleCard[0];
    return faceValue;
}
var cardPair = [removeCard(),removeCard()];
console.log(cardPair);




然而, faceCards 阵列在弹出卡片后仍然是相同的,这意味着下一张卡片与cardPair阵列中的卡片相同。

  

我需要反映我在里面使用的效果   removeCard()函数反映在deck()函数中。

我想我可以在全局范围内创建faceCards数组,或者使用'这个'在某种程度上(我并不是很想要,因为我对它并不熟悉)。如何从另一个函数内部更新一个函数?非常感谢您阅读本文。

2 个答案:

答案 0 :(得分:2)

您的错误在这里:

var singleCard = deck().pop()

deck()的调用会在每次调用时创建一个 new 数组,并且不会重复返回相同的数组。

如果您还不想完整的OO,请考虑至少将套牌作为参数传递给removeCard()函数,即

function removeCard(deck) {
    var singleCard = deck.pop();
    var faceValue = singleCard[0];
    return faceValue;
}

var deck = newDeck();
var pair = [ removeCard(deck), removeCard(deck) ];

但最终 应该更长时间使用完整的OO解决方案,然后您的使用可能会变为:

var deck = new Deck();
var pair = [ deck.takeCard(), deck.takeCard() ];

这个问题的实施超出了这个特定问题的范围。

答案 1 :(得分:2)

每次运行deck()时,您都会创建一个新数组。尝试将套牌保存在一个数组中并在此处运行pop



function deck() {
    var faceCards = [['jack', 11],['queen', 12],['king', 13]];
    return faceCards;
}
function removeCard(fromDeck) {
    var singleCard = fromDeck.pop();
    var faceValue = singleCard[0];
    return faceValue;
}
var thisDeck = deck();
var cardPair = [removeCard(thisDeck),removeCard(thisDeck)];
console.log(cardPair);