2012-02-28 2 views
0

Я новичок в программировании и javascript, и у меня есть вопрос, с которым я уже немного боролся. Я пытаюсь создать карточную игру и иметь объект карты, который возвращает картографическое представление формата (карточка #, например, 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

um заменяет .indexOf() звучит хорошо. Можете ли вы указать мне, где я могу научиться это делать? –

+0

Я думаю, что вам лучше создавать все возможные карты заранее, а затем случайным образом выбирать из них - если вы храните ссылки на эти карты, а не генерируете новые, вы можете сравнить их или использовать '.indexOf()' - но в любом случае, если вы «Расскажите мне, какова структура ваших объектов« Card »и« cardRepresentation »- я мог бы обновить свой вопрос простым примером. – nnnnnn

Смежные вопросы