2012-02-28 29 views
0

我是編程和JavaScript的新手,我有一個問題,現在一直在努力。我試圖建立一個紙牌遊戲,並有一個卡對象,它返回格式卡(card#,例如,5,Hearts)。我在程序開始時處理一張卡片,並確認發出的卡片是唯一的(即,尚未使用)。我有以下結構:無法在卡陣列中獲得唯一值

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數組中的重複卡。任何人都可以指出我的邏輯錯誤?

感謝

回答

2

如果newCard.cardRepresentation是一個對象,然後.indexOf()永遠不會找到一個匹配,因爲兩個對象的引用被認爲是相等僅當它們指向同一個實例 - 你跟上new Card()創建新實例。

如果你可以有newCard.cardRepresentation作爲一個字符串它應該工作。或者,如果你寫你自己的函數來取代.indexOf(),你的函數知道如何比較兩個.cardRepresentation對象...

我認爲一個更好的解決方案是通過生成所有可能的牌開始,他們將在一個數組,然後您的交易功能可以從該陣列中隨機選擇。

+0

這個替換.indexOf()聽起來不錯。你能指出我在哪裏可以學會這麼做嗎? – 2012-02-28 21:17:27

+0

我認爲你最好提前生成所有可能的卡片,然後從它們中隨機選擇 - 如果你存儲對這些卡片的引用而不是生成新卡片,你可以比較它們或使用'.indexOf()' - 但無論如何,如果你'告訴我'Card'和'cardRepresentation'對象的結構是什麼,我可以用一個簡單的例子更新我的問題。 – nnnnnn 2012-02-28 22:56:19