我是编程和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数组中返回重复的卡片。任何人都可以指出我的逻辑错误吗?
由于
答案 0 :(得分:2)
如果newCard.cardRepresentation
是一个对象,那么.indexOf()
将永远不会找到匹配项,因为只有当两个对象引用引用相同的实例时才认为它们相等 - 您继续创建新的new Card()
的实例。
如果您可以将newCard.cardRepresentation
作为字符串,它应该可以正常工作。或者,如果您编写自己的函数来替换.indexOf()
,那么您的函数知道如何比较两个.cardRepresentation
对象......
我认为更好的解决方案是首先生成所有可能的卡片,将它们放入一个数组中,然后你的交易函数可以从该数组中随机选择。