【问题标题】:The syntax for checking equality of a variable检查变量相等性的语法
【发布时间】:2019-06-28 21:13:03
【问题描述】:

想知道是否有优化(使其更胜任)比较语法的选项。

我有一个简单的代码,它通过“if - else”条件语句检查我的函数的输入。我验证变量是否等于输入之一或不使用逻辑“或”运算符。


function cc(card) {
  // Only change code below this line
  if (card==2 || card==3 || card==4 || card==5 || card==6) {
    count+=1;
  }
  else if (card==7 || card==8 || card==9) {
count+=0;
  }
  else if (card==10 || card=="J" || card=="Q" || card=="K" || card=="A") {
    count-=1;
  }
  else {
  return "No such combination";
  }
  if (count>0) {
    return count + " " + "Bet";
  }
  else {
    return count + " " + "Hold";
  }
  // Only change code above this line
}

// Add/remove calls to test your function.
// Note: Only the last will display
cc(7); cc(8); cc(9);

我想知道是否可以用其他语法替换这么多“OR”运算符? 我知道“切换”方法,但现在我对这种方法特别感兴趣。

【问题讨论】:

  • Argh...我不明白...似乎输入是一个数组,例如 [1, 'A', ...] 是计数操作的逻辑...但是您的代码只有一张卡......哪一张是确切的问题?

标签: javascript if-statement logical-operators


【解决方案1】:

你可以使用Array.prototype.includes:

if ([2, 3, 4, 5, 6].includes(card)) {
  count += 1;
} else if ([7, 8, 9].includes(card)) {
  count += 0;
} else if ([10, "J", "Q", "K", "A"].includes(card)) {
  count -= 1;
}

【讨论】:

  • 谢谢!看起来对我来说是最方便的方式!
【解决方案2】:

您可以使用将卡片值映射到要添加到 count 的金额的对象:

const cards = {
    2: 1, 3: 1, 4: 1, 5: 1, 6: 1,
    7: 0, 8: 0, 9: 0,
    10: -1, J: -1, Q: -1, K: -1, A: -1
};
function cc(card) {
    if (card in cards) {
        count += cards[card];
        if (count > 0) {
            return count + " Bet";
        } else {
            return count + " Hold";
        }
    } else {
        return "No such combination"
    }
}

【讨论】:

    【解决方案3】:
    if (card==2 || card==3 || card==4 || card==5 || card==6) {
    count+=1;
    

    可以改成

    if (card >= 2 && card <= 6) {
    count+=1;
    

    编辑: 如果您只想要整数,您可能需要添加card / 2 == 0

    【讨论】:

    • @Bafftek 它也可以是 3.5,然后我们得到误报
    • 理论上是的,但由于这是一个纸牌游戏,十进制值没有意义,你可以在函数顶部或其他地方trunc变量。
    • 是的,这对于带有数字的条件看起来更好。但不幸的是,当我检查 J、Q、K 时,它不适用于这种情况:(
    【解决方案4】:

    你可以这样写,让它变得非常可读

    function cc(cards) {
        let all = [
            { cards : [2,3,4,5,6] : value : 1},
            { cards : [7,8,9]     : value : 0},
            { cards : [10,'J','Q','K','A'] : value : -1}
        ];
    
        return cards.reduce( (acc,card) => {
            let found = all.find( v => v.cards.indexOf(card) !== -1 );
            if ( !found ) throw 'No such combination';
            return acc + found.value;
        }, 0);
    }
    

    抱歉编辑,我刚刚意识到输入是一个数组... 你可以把 throw/hold 测试放在这个函数之外:)

    【讨论】:

      猜你喜欢
      • 2017-01-20
      • 1970-01-01
      • 2023-01-19
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 2016-12-24
      • 2016-03-18
      相关资源
      最近更新 更多