【问题标题】:Objects in an array contain a specific value数组中的对象包含特定值
【发布时间】:2017-09-26 06:05:16
【问题描述】:

我正在尝试用 Javascript 构建二十一点游戏,并想确定玩家的手牌是否包含“A”。

我有一个用于玩家手牌和庄家手牌的数组,其中包含所有牌,每个牌对象都有 3 个与之关联的值……牌名、花色和牌面值。您如何专门查找数组中每个对象的值“Ace”?

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

var playerHand = [];

var drawOne = function() {
   var card = cardsInDeck.pop();
   return card;
}

var p1 = drawOne();
    playerHand.push(p1.value);
var p2 = drawOne();
    playerHand.push(p2.value);

    if ((playerHand.indexOf("Ace") > 0) && playerTotal > 21) {
        playerTotal -= 10;
    }

任何有关如何正确处理此问题的见解将不胜感激。

【问题讨论】:

  • 请分享playerHand对象的结构
  • 抱歉,刚刚更新了更多关于手部构造的结构。
  • 可以分享一下卡片的结构吗?
  • 所以,我想我只是没有正确使用我的头脑...我正在使用卡片的值而不是名称填充数组...我需要查找 indexOf Aces“价值”而不是“名称”。调整了我的代码,现在可以正常工作了。
  • 酷,所以从来没有把整张牌推到 playerHand,只有它的价值。

标签: javascript arrays


【解决方案1】:

我有一个玩家手牌和庄家手牌的数组来包含所有 卡片,每个卡片对象都有 3 个与之关联的值。

假设playerHand是一个数组,你可以试试

var hasAce = playerHand.some( function( card ){
  return card.suite.toLowerCase() == "ace";  
});

现在继续你剩下的逻辑

if ( hasAce && playerTotal > 21) {
    playerTotal -= 10;
}

编辑

根据您分享的更新,由于您只推送值而不是对象,indexOf 可以正常工作

if ((playerHand.indexOf("Ace") > 0) && playerTotal > 21) {
    playerTotal -= 10;
}

【讨论】:

    猜你喜欢
    • 2021-12-08
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    相关资源
    最近更新 更多