多个三元运算符

Posted

技术标签:

【中文标题】多个三元运算符【英文标题】:Multiple Ternary Operators 【发布时间】:2011-12-07 03:18:28 【问题描述】:

我需要一些关于三元运算符的语法帮助,这将帮助我将正确的标记图标放在我的好地图上。我有三个区域 0、1 和 2,它们具有唯一的图标 0、1 和 2。

我以前只有两个区域,所以这个三元运算符工作得很好;

var icon = (area == 1) ? icon1 : icon0;

现在我需要为 area2 添加一个额外的第三个图标 (icon2)。

我尝试了各种方法,但似乎都无法正确。

【问题讨论】:

【参考方案1】:

语法是:

var icon = (area == 1) ? icon1 : (area == 2) ? icon2 : icon0;

但这开始变得复杂了。你最好只创建一个函数来完成这项工作:

var icon = getIcon(area);

function getIcon(area) 
  if (area == 1)  
    return icon1; 
   else if (area == 2)  
    return icon2; 
  

  return icon0;

【讨论】:

写完后,我意识到0总是映射到icon0,所以Pointy的答案更可取。但是,如果在这种情况下您需要一个“包罗万象”的值,例如 icon0,这种方法仍然可行。 谢谢贾斯汀,我认为这个功能最适合我的需要。我还发现与三元运算符一起工作更友好,三元运算符可能会随着时间的推移变得更大。谢谢。【参考方案2】:

对于任何对多重三元语法感到困惑的人(就像我一样),它是这样的:

var yourVar = condition1 ? someValue
            : condition2 ? anotherValue
            : defaultValue;

您可以添加任意数量的条件。

您可以进一步阅读https://developer.mozilla.org/en-US/docs/Web/javascript/Reference/Operators/Conditional_Operator

【讨论】:

【参考方案3】:

怎么样:

var icon = [ icon0, icon1, icon2 ][area];

【讨论】:

这个操作叫什么? @JM-AGMS 这只是一个简单的数组索引操作。 area 变量包含一个数字。 ['A', 'B', 'C'][area] 所以如果面积 = 2,C 会是值吗?我从没想过同时定义和设置数组索引。 @JM-AGMS 是的,没错。数组字面量与值为数组的变量一样是数组。 如果你想让 icon0 成为一个后备,那就是icon: 1: icon1, 2: icon2 [area] || icon0【参考方案4】:

对象字面量怎么样。

icons = 
    0: icon0,
    1: icon1,
    2: icon2


icon = icons[area];

【讨论】:

【参考方案5】:

很简单的方法

如果你的对象是这样的:

var obj = 
  x: true,
  y: 
    xy: 'some value'
  


var result = obj ? obj.y ? obj.y.xy ? obj.y.xy : 'N/A' : 'N/A' : 'N/A'

console.log(result) // "some value"

【讨论】:

这不是一个很好的测试,因为test1 ? test1 : (test2 ? test2 : 'some default value')(test1 ? test1 : test2) ? test2 : 'some default value' 都给出了相同的结果 更好的测试是:var test = true; var result = test===true ? 'it is true' : test===false ? 'it is false' : 'it is null'。这样,当您将最后两个运算符 test===true ? 'it is true' : (test===false ? 'it is false' : 'it is null') 分组时,您会得到 'it is true'(正确),但是当您将前两个运算符 (test===true ? 'it is true' : test===false) ? 'it is false' : 'it is null' 分组时,您会得到 'it is false'(不正确)。这个测试更好,因为它显示了隐式运算符分组。【参考方案6】:
var icon = (area == 0) ? icon0 : (area == 1) ? icon1 : icon2;

【讨论】:

快速问:括号有必要吗? @BugWhisperer 我相信你的意思是括号,没有括号不是必需的,只是试图显示分离。 是的,这就是我的意思。好的,我知道在某些情况下括号是必要的,这就是我问的原因

以上是关于多个三元运算符的主要内容,如果未能解决你的问题,请参考以下文章

如何在三元运算符中编写多个语句?

具有三元运算符的多个 css 规则

Angular ngClass 多个三元运算符条件

在 PHP 中堆叠多个三元运算符

三元条件运算符中的多个条件?

带有多个表达式的 JavaScript 中的三元运算符?