多个三元运算符
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 我相信你的意思是括号,没有括号不是必需的,只是试图显示分离。 是的,这就是我的意思。好的,我知道在某些情况下括号是必要的,这就是我问的原因以上是关于多个三元运算符的主要内容,如果未能解决你的问题,请参考以下文章