我是编程和javascript的新手,我有一个问题已苦苦挣扎了一段时间。我正在尝试制作纸牌游戏并拥有一个纸牌对象,该对象返回格式(纸牌#,例如5,心)的纸牌表示形式。我在程序开始时发出了一张卡片,并验证所发出的卡片是唯一的(即尚未使用过)。我有以下结构:
var usedCards= [];
function dealCards() {
for (i = 0; i < 3; i++)
{
var card = createUniqueCard();
usedCards.push(card.cardRepresentation);
}
}
function createUniqueCard() {
do {
var newCard = new Card();
}
while (usedCards.indexOf(newCard.cardRepresentation) != -1);
return newCard;
}
这仍然会在我的usedCards数组中返回重复的卡。谁能指出我的逻辑错误?
谢谢
最佳答案
如果newCard.cardRepresentation
是对象,则.indexOf()
将永远找不到匹配项,因为只有两个对象引用引用相同的实例时,它们才被视为相等-您继续使用new Card()
创建新实例。
如果可以将newCard.cardRepresentation
作为字符串,则应该可以。或者,如果您编写自己的函数来替换.indexOf()
,则您的函数知道如何比较两个.cardRepresentation
对象...
我认为更好的解决方案是首先生成所有可能的卡,然后将它们放入数组中,然后您的交易函数可以从该数组中随机选择。