javascript - 更新函数返回的数组

标签 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 数组中看到的一样。

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/

相关文章:

javascript - 如何创建动态日期时间选择器值?

javascript - asyncjs 回调未执行

javascript - 单击外部即可关闭滑动面板

C++ 华氏度到摄氏度(反之亦然)循环问题

c++ - 调用函数传递数组

c - 如何使用 struct 显示从 C 中另一个函数输入的数据

php - PHP代码中额外的神秘空间

C++ 自定义数组容器动态大小

vb.net - 如何从 VB.NET 中的数组中删除项目?

java - 如何获取 C[] 的类对象,给定 C 的类对象