我是编程和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对象...

我认为更好的解决方案是首先生成所有可能的卡,然后将它们放入数组中,然后您的交易函数可以从该数组中随机选择。

09-28 00:27