【问题标题】:JS Ternary functions with multiple conditions?具有多个条件的JS三元函数?
【发布时间】:2017-12-14 19:14:37
【问题描述】:

我一直在 JavaScript 中使用三元运算符来根据用户输入修改对象的值。我有以下代码,它应该运行:

var inputOneAns = inputOne == "Yes" ? "517" : "518";

如您所见,我将数字字符串值分配给inputOneAns无论用户输入的是“是”还是“否”。但是,可能存在用户没有选择值的情况(因为它不是必需的)。如果此输入留空,我想为inputOneAns 分配一个空字符串“”。有没有办法或我将一个三元运算符嵌入另一个三元运算符中?为了帮助澄清,这是我想用我的三元函数但使用 if else 语句来完成的相同函数?

if (inputOne == "Yes"){
    var inputOneAns = "517"
}else if (inputOne == "No"{
    var inputOneAns = "518"
}else{
    var inputOneAns = ""
}

是否可以在一个三元函数中包含多个表达式?有没有更好的方法来完成我正在寻找的东西?提前感谢您的提示。

【问题讨论】:

  • 可以嵌套三元运算符,但通常不是很清楚
  • let inputOneAns = inputOne === 'Yes' ? '517' : inputOne === 'No' ? '518' : ''; 但不要这样做。这很丑陋,if/else 更具可读性。如果你的同事知道你住在哪里,这是你不想冒的风险......
  • var choices = {Yes: 517, No: 518}; var inputOneAns = inputOne in choices ? choices[inputOne] : ""inputOneAns = choices[inputOne] || ""

标签: javascript if-statement conditional ternary-operator


【解决方案1】:

是的,您可以在三元运算符中使用多个条件。希望这会对你有所帮助。

var x=20;
var y = x<13 ? "Child" : x<20 ? "Teenage" : x<30 ? "Twenties" : "Old people";
console.log(y);

【讨论】:

    【解决方案2】:

    是的,它确实提供了比 switch 语句更简洁的代码.. 有所有的中断..

    inputOne == "Yes" ? "517" :
    inputOne == "No" ? "518" : inputOneAns = "";
    

    【讨论】:

      【解决方案3】:

      最优雅、最简洁的方法是利用 Object 字面量:

      const Switch = (str) => ({
        "Yes": "517",
        "No": "518",
      })[str] || '';
      
      console.log(Switch("Yes")); // 517
      console.log(Switch("No"));  // 518
      console.log(Switch("Non matching value")); // Empty

      这具有可读性和灵活性的优点。

      【讨论】:

        【解决方案4】:

        不幸的是,JavaScript 没有提供一种超级简洁易读的方式来执行此操作。就我个人而言,我只会使用一些像这样的单行 if 语句:

        var inputOneAns;
        if (inputOne === 'Yes') inputOneAns = '517';
        if (inputOne === 'No') inputOneAns = '518';
        else inputOneAns = '';
        

        如果你把它抽象成一个函数会更简洁(注意:在这种情况下不需要else):

        function getInputOneAns(inputOne) {
            if (inputOne === 'Yes') return '517';
            if (inputOne === 'No') return '518';
            return '';
        }
        

        就我个人而言,我不太喜欢 switch 语句,原因有两个:首先,那些额外的 break 语句使代码膨胀,其次,switch 语句非常有限 - 你只能进行简单的相等检查,并且只能针对单个变量。此外,如果您知道您将始终检查单个字符串,我会更喜欢一个简单的地图对象:

        var map = { 'Yes': '517', 'No': '518' };
        var inputOneAns = map[inputOne] || '';
        

        【讨论】:

          【解决方案5】:
          var r = inputOne == "" ? "" : ( 
          inputOne == "Yes" ? "517" : "518");
          

          【讨论】:

            【解决方案6】:

            是的,你可以去野外嵌套三元组。我觉得这个版本相当易读:

            var foo = (
              bar === 'a' ? 1 : // if 
              bar === 'b' ? 2 : // else if 
              bar === 'c' ? 3 : // else if
              null // else 
            );
            

            但这并不是一个广泛认同的观点,在团队中工作时您可能应该坚持使用if/elseswitch

            【讨论】:

            • 很有帮助,可以用这种语法写多行语句吗?
            • 是的,我不会做得过火,但我喜欢它的原因是三元是表达式而不是语句,所以你可以根据多个条件分配const,而不必重新分配变量。
            • 谢谢达蒙,真的很有帮助
            【解决方案7】:

            似乎是 switch 语句的经典用法:

            let inputOneAns = '';
            switch(inputOne) {
              case 'Yes':
                inputOneAns = "517";
                break;
              case 'No': 
                inputOneAns = "518";
                break;
              default:
                inputOneAns = "";
            }
            
            • 请注意,您实际上并不需要默认大小写,但我发现它使事情更具可读性。

            【讨论】:

              【解决方案8】:

              是的,您可以将它们链接在一起,就像使用 else if 语句一样,但有时它可能有点难以阅读,所以我倾向于将我的内容分成多行。

              var inputOneAns = inputOne == 'Yes' ? '517' :
                inputOne == 'No' ? '518' : '';
              

              但是在这种情况下,我建议您使用 switch 语句,因为您正在比较每个案例的相同值。

              【讨论】:

                【解决方案9】:

                在这种情况下,switch 语句可能是最佳选择。

                let inputOneAns;
                switch(inputOne) {
                  case "Yes":
                   inputOneAns = "517";
                   break;
                  case "No":
                   inputOneNas = "518";
                   break;
                  default:
                   inputOneNas = "";
                }
                

                如果你可以做超过 2 个条件的三元运算,它们会变得非常混乱。你可以把条件放在一起,但我不知道你为什么要这样 - 那会难以置信混乱。

                【讨论】:

                  猜你喜欢
                  • 2020-07-22
                  • 1970-01-01
                  • 2016-11-02
                  • 1970-01-01
                  • 2020-01-19
                  • 1970-01-01
                  • 1970-01-01
                  • 2022-11-14
                  • 2021-12-28
                  相关资源
                  最近更新 更多