我是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())
这将为每张卡返回ranks
,suits
和value
。
接下来,我尝试解决比较卡片的问题(练习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
,因为数组中没有对象可以与其进行比较。
我现在仍处于困境,不确定如何获得两张牌之间的区别。任何建议/帮助都将不胜感激。
答案 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; }