无法在卡阵列中获取唯一值

时间:2012-02-28 20:55:34

标签: javascript

我是编程和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数组中返回重复的卡片。任何人都可以指出我的逻辑错误吗?

由于

1 个答案:

答案 0 :(得分:2)

如果newCard.cardRepresentation是一个对象,那么.indexOf()将永远不会找到匹配项,因为只有当两个对象引用引用相同的实例时才认为它们相等 - 您继续创建新的new Card()的实例。

如果您可以将newCard.cardRepresentation作为字符串,它应该可以正常工作。或者,如果您编写自己的函数来替换.indexOf(),那么您的函数知道如何比较两个.cardRepresentation对象......

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