我一直在尝试使用 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 数组中看到的一样。
I need to mirror the effects I used inside of the removeCard() function to reflect back in the deck() function.
我想我可以在全局范围内创建 faceCards 数组或以某种方式使用“this”(我不太想要,因为我不太熟悉它)。如何从另一个函数内部更新一个函数?非常感谢您阅读本文。
最佳答案
你的错误在这里:
var singleCard = deck().pop()
每次调用 deck()
都会创建一个新卡片数组,并且不会重复返回同一个数组。
如果您还不想完全面向对象,请考虑至少将牌组作为参数传递给 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() ];
这个的实现超出了这个特定问题的范围。
关于javascript - 更新函数返回的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41431028/