我有一些代码,其中包含许多与此类似的if / else语句:
var name = "true";
if (name == "true") {
var hasName = 'Y';
} else if (name == "false") {
var hasName = 'N';
};
但有没有办法缩短这些陈述?像? "true" : "false"
...
答案 0 :(得分:86)
使用ternary :?
operator [spec] 。
var hasName = (name === 'true') ? 'Y' :'N';
三元运算符让我们可以完全按照您的意愿编写简写if..else
语句。
看起来像:
(name === 'true')
- 我们的条件
?
- 三元运算符本身
'Y'
- 条件评估为真的结果
'N'
- 条件评估为假的结果
所以简而言之(question)?(result if true):(result is false)
,你可以看到 - 它返回表达式的值,所以我们可以简单地将它分配给变量,就像上面的例子一样。
答案 1 :(得分:18)
您可以将对象用作地图:
var hasName = ({
"true" : "Y",
"false" : "N"
})[name];
这也适用于许多选项
var hasName = ({
"true" : "Y",
"false" : "N",
"fileNotFound" : "O"
})[name];
(获得参考的人的加分点)
注意:你应该使用实际的布尔值而不是字符串值" true"表示真值的变量。
答案 2 :(得分:14)
试试这个
hasName = name ? 'Y' : 'N';
答案 3 :(得分:4)
尝试
var hasName = 'N';
if (name == "true") {
hasName = 'Y';
}
甚至尝试ternary operator
喜欢
var hasName = (name == "true") ? "Y" : "N" ;
即使只是你可以尝试
var hasName = (name) ? "Y" : "N" ;
由于名称有Yes
或No
,但我不确定。
答案 4 :(得分:3)
如果你的if-else只有two
个条件,那么大多数答案都可以正常使用。对于更多,我猜你想要什么,你将使用数组。
names
数组中的每个名称对应元素都会在hasNames
数组中包含完全相同的索引的元素。那么这就是这四行的问题。
names = "true";
var names = ["true","false","1","2"];
var hasNames = ["Y","N","true","false"];
var intIndex = names.indexOf(name);
hasName = hasNames[intIndex ];
此方法也可以使用对象和属性illustrated by Benjamin实现。
答案 5 :(得分:1)
尝试此方法;
速记方法:
let variable1 = '';
let variable2 = variable1 || 'new'
console.log(variable2); // new
长手方法:
let variable1 = 'ya';
let varibale2;
if (variable1 !== null || variable1 !== undefined || variable1 !== '')
variable2 = variable1;
console.log(variable2); // ya
答案 6 :(得分:1)
?: Operatpr
如果要缩短If / Else,则可以使用?:
运算符:
condition ? action-on-true : action-on-fasle(else)
例如:
let gender = isMale ? 'Male' : 'Female';
在这种情况下,else
部分是必需的。
&&运营商
在另一种情况下,如果您只有if
个条件,则可以将&&
运算符用作:
condition && action;
例如:
!this.settings && (this.settings = new TableSettings());
仅供参考:您必须尝试避免使用if-else或至少减少使用它,并尝试替换为Polymorphism或继承。成为Anti-If人