Сравнение значений внутри объектов с помощью функции конструктора - PullRequest
0 голосов
/ 11 апреля 2019

Я создал функцию конструктора, в которой вы можете создать карту. Я пытаюсь создать метод внутри этой функции, который проверяет, совпадает ли любое значение или масти одного объекта карты с другим объектом карты. Если это все, я просто хочу отправить предупреждение о том, что значение или костюм одинаковы. Например,

карточка1 = новая карточка (8, «клубы»)
карта2 = новая карта (8, «бриллианты»)

Возвращается сообщение о том, что значение карты 1 и 2 одинаково.

Я не уверен, как проверить каждый отдельный объект Карты и сравнить его с другим объектом Карты.

function Card(value, suit){
this.value = value;
this.suit = suit;
this.check = function(){
    // checking the card objects goes here
}
}

let card1 = new Card(8, 'diamonds');
let card2 = new Card(2, 'clubs');

Ответы [ 5 ]

1 голос
/ 11 апреля 2019

Это единственный способ, которым я могу думать -

function Card(value, suit, list){
        console.log("ritesh");

        if(check(value, suit, list)){
            this.value = value;
            this.suit = suit;
        } else {            
            console.log("duplicate car found!!");
            return;
        }

        function check(value, suit, list){
            for (var i=0; i < list.length; i++) {
                if (list[i].value === value || list[i].suit === suit) {
                    return false;
                }
            }
            return true;
        }
        this.list = list;
    }
    let list = [];
    list.push(new Card(8, 'diamonds',list));
    list.push(new Card(2, 'clubs',list));
    list.push(new Card(8, 'clubs',list));
1 голос
/ 11 апреля 2019

Вот способ создания объекта Deck.Вы должны быть в состоянии сделать это и с простым массивом, но колода должна быть тем объектом, который знает, какие карты находятся в колоде, что означает, что она должна быть функцией объекта колоды.

Как правило, вы можете просто использовать метод массива some() и передать ему функцию, которая определяет true или false:

function Card(value, suit){
  this.value = value;
  this.suit = suit;
}

function Deck(cards){
  this.cards = [...cards]
}

// the function to tell if card value OR suit is in deck
Deck.prototype.includesAny = function(card){
  return this.cards.some(item => item.suit === card.suit || item.value === card.value)
}

let card1 = new Card(8, 'diamonds');
let card2 = new Card(2, 'clubs');
let card3 = new Card(8, 'diamonds')
let card4 = new Card(3, 'hearts')

// a deck with only two cards
let deck = new Deck([card1, card2])

console.log(deck.includesAny(card3)) // deck has both 8 and diamonds
console.log(deck.includesAny(card4)) // no hearts or threes in deck
0 голосов
/ 11 апреля 2019

Основываясь на предыдущем ответе, вот правильный способ выполнить проверку, это также гарантирует, что переданный объект того же типа, что и «Карта», Вы также можете передать массив вместо одного объекта и использовать функцию foreach для перебора массива:

function Card(value, suit){
  this.value = value;
  this.suit = suit;
  this.check = function(card2){
    var match = false;
    if(card2 && typeof card2=== 'object' && value.constructor === Card){
      match = ((this.value == card2.value) || (this.suit == card2.suit));
    }
    return match;
  }
}


let card1 = new Card(8, 'diamonds');
let card2 = new Card(2, 'clubs');
console.log(card1.check(card2));
0 голосов
/ 11 апреля 2019

Вопрос немного неясен, но я предполагаю, что вы будете передавать карту в функцию, поэтому вот мое решение

function Card(value, suit){
  this.value = value;
  this.suit = suit;
  this.check = function(cardToCheckAgainst){
    let matchOnSuit = 0;
    let matchOnValue = 0;
    this.suit === cardToCheckAgainst.suit ? matchOnSuite = 1 : matchOnSuite = 0;
    this.value === cardToCheckAgainst.value ? matchOnValue = 1 : matchOnValue = 0;
    if(matchOnSuit == 1){
     alert('both cards have the suit:', this.suit );
    }
    if(matchOnValue == 1){
     alert('both cards have the value:', this.value );
    }
  }
}


let card1 = new Card(8, 'diamonds');
let card2 = new Card(2, 'clubs');
0 голосов
/ 11 апреля 2019

Вы можете попробовать это решение:

function Card(value, suit){
this.value = value;
this.suit = suit;
this.check = function(...cards){
    for(var card of cards){
      if((this.value == card.value) || (this.suit == card.suit)) return true;
    }     
    return false;
}
}


let card1 = new Card(8, 'diamonds');
console.log(card1.check(new Card(2, 'clubs'), new Card(3,'hearts')));

Примечание: - Здесь вы можете передать N карт для сравнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...