首页 > 解决方案 > 返回两个项目之间的数值属性

问题描述

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

但是,我不明白为什么我无法valuedeck

我四处寻找解决方案,包括:

StackOverflow:比较两个数字字符串值

中等(没有比较卡片的内容。PT2 包括我们没有做的 HTML。):https ://medium.com/@pakastin/javascript-playing-cards-part-1-ranks-and-values-a9c2368aedbd

Stack Overflow(这个问题被否决了):如何在 JavaScript 纸牌游戏中比较 2 张纸牌

我能够搭建甲板(练习 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因为数组中没有一个对象可以与之比较。

我被困在这一点上,不知道如何获得卡片之间的区别。非常感谢任何建议/帮助。

标签: javascriptarrays

解决方案


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

否则,两个参数都有值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; }


推荐阅读