【问题标题】:User ternary operator for 3 possible outcomes3 种可能结果的用户三元运算符
【发布时间】:2014-06-30 18:28:02
【问题描述】:

我想根据以下写一个三元运算符;

var statusJSON = {
    '- Select -': '',
    'Active': true,
    'Inactive': false
};

目前我有

statusFlag: $('#statusFlag').val() == 'true' ? true : false

这适用于 true 和 false 值,但不处理第三个条件(即空 "")

我该如何处理?

【问题讨论】:

  • 我对对象与条件运算符的关系有点困惑。如果 `$('#statusFlag').val()` 返回属性名称之一,您将使用 statusJSON[$('#statusFlag').val()]。那是你真正想要的吗?
  • 那需要一个四元运算符。
  • 这似乎是一个查找/查找方法的工作
  • 最好使用'- Select -' : 'empty', 和statusFlag: $('#statusFlag').val()

标签: javascript jquery ternary-operator


【解决方案1】:
statusFlag: $('#statusFlag').val() == 'true' ? true : 
            $('#statusFlag').val() == '' ? 'empty' : false

你可以像这样添加多个条件:

a ? b : (c ? d : e)

() 不是必需的,但在我看来,当您编写时不使用换行符,它们会提高可读性。

这意味着:

if(a){
    b
}else{
    if(c){
        d
    }else{
        e
    }
}

所以,基本上,您在前一个的else 子句中嵌套了另一个三元运算符。你可以随心所欲:

a ? b :   // if(a) then `b`
c ? d :   // else, if(c) then `d`
e ? f :   // else, if(e) then `f`
g ? h :   // else, if(g) then `h`
i ? j : k // else, if(i) then `j`, else `k`

【讨论】:

  • 解释得很好。非常感谢。
【解决方案2】:

尝试嵌套ternary 运算符,

statusFlag: $('#statusFlag').val() == 'true' ?
          true : $('#statusFlag').val() == 'false' ? false : "empty";

【讨论】:

    【解决方案3】:

    您想在三元表达式中使用 2 个条件,例如:

    value = (condition1) ? a : (condition2) ? c : d;
    

    你的情况:

    statusFlag: $('#statusFlag').val() == 'true' ? true : 
            $('#statusFlag').val() == '' ? 'empty' : false
    

    【讨论】:

      【解决方案4】:

      您可以使用statusJSON 作为查找表:

      var val = $('#statusFlag').val();
      … statusFlag: val in statusJSON ? statusJSON[val] : false /*or whatever*/
      

      如果您确定只有这三个值确实出现,或者对 undefined 的结果没有问题,那么您不妨使用

      … statusFlag: statusJSON[$('#statusFlag').val()]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-26
        • 2021-10-06
        • 1970-01-01
        • 2022-01-11
        • 2018-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多