返回两个项目之间的数值属性

时间:2019-06-02 19:25:23

标签: javascript arrays

我是JS的新手(第一周),她为学校项目做命令行纸牌游戏。我已经完成了前三个练习(省略了2和3)。

但是,我不明白为什么我无法从value访问属性deck

我一直在寻找一种解决方案,包括:

StackOverflow:compare two numeric String values

中(在比较卡上没有任何内容。PT2包含我们没有使用的HTML。):https://medium.com/@pakastin/javascript-playing-cards-part-1-ranks-and-values-a9c2368aedbd

堆栈溢出(此问题被否决):How to compare 2 cards in a JavaScript card game

我能够建造甲板(练习1):

function buildDeck() {
  const suits = ['spades', 'hearts', 'diamonds', 'clubs'];
  const ranks = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'];
  const deck = [];
  for (let r = 0; r < ranks.length; r++) {
    for (let s = 0; s < suits.length; s++) {
      deck.push({ ranks: ranks[r], suits: suits[s], value: r + 1 });
    }
  }
  return deck;
}
console.log(buildDeck())

这将为每张卡返回rankssuitsvalue

接下来,我尝试解决比较卡片的问题(练习4):

const compare = (firstCard, secondCard) => {
  const cardValue = firstCard.value - secondCard.value;
  return cardValue;
}
console.log(compare());

但是,当我尝试返回第一张卡减去第二张卡的value属性时,出现以下错误:

const cardValue = firstCard.value - secondCard.value;                              
TypeError: Cannot read property 'value' of undefined

如果我从代码中删除.value,我当然会得到NaN,因为数组中没有对象可以与其进行比较。

我现在仍处于困境,不确定如何获得两张牌之间的区别。任何建议/帮助都将不胜感激。

1 个答案:

答案 0 :(得分:3)

您需要交出卡片作为参数。

否则,两个参数都具有值undefined,并且该值不是对象。

const compare = (firstCard, secondCard) => {
//               ^^^^^^^^^  ^^^^^^^^^^    parameters


console.log(compare(card1, card2));
/                   ^^^^^  ^^^^^     insert cards for comparing

这是一个随机绘制两个不同卡牌及其比较的示例。结果可能是负数。如果不希望这样,则可以返回一个绝对值。

const compare = (firstCard, secondCard) => firstCard.value - secondCard.value;

function buildDeck() {
    const suits = ['spades', 'hearts', 'diamonds', 'clubs'];
    const ranks = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'];
    const deck = [];
    for (let r = 0; r < ranks.length; r++) {
        for (let s = 0; s < suits.length; s++) {
            deck.push({ ranks: ranks[r], suits: suits[s], value: r + 1 });
        }
    }
    return deck;
}

var deck = buildDeck(),
    card1 = deck[Math.floor(Math.random() * deck.length)],
    card2;

do {
    card2 = deck[Math.floor(Math.random() * deck.length)];
} while (card1 === card2)

console.log(card1);
console.log(card2);
console.log(compare(card1, card2)); // <---- here hand over the two cards for comparing
.as-console-wrapper { max-height: 100% !important; top: 0; }