我有两个if语句想要变成三元组但我不知道如何。
if (val === true && optval === 'car' || val === true && optval === 'truck' )view_list.style.display = 'none';
if (val === true && optval === 'buss' || val === true && optval === 'van')view_list.style.display = '';
答案 0 :(得分:6)
除了黑客之外,我不会提及,当你想在所有情况下都返回一个值时会使用三元组。
如果val
不是true
,那么您什么都不做。
因此,这里不能使用。
答案 1 :(得分:2)
view_list.style.display =
(val === true && optval === 'car' ||
val === true && optval === 'truck' ) ?
'none' :
((val === true && optval === 'buss' ||
val === true && optval === 'van') ?
'' :
view_list.style.display ) ;
或更简洁:
view_list.style.display =
(val === true && ( optval === 'car' || optval === 'truck' ) ) ?
'none' :
((val === true && ( optval === 'buss' || optval === 'van' ) ?
'' :
view_list.style.display );
第二个条件的括号是可选的。
当然这不是一个好方法,这个答案不应该被视为对这种编程风格的认可。
答案 2 :(得分:1)
不是你要求的,但正如@dystroy所说,这不是三元的最佳情况。
但你仍然可以让它更优雅。 <怎么样
var styleMapping = {
'car': 'none',
'truck': 'none',
'buss': '',
'van': ''
};
// Apparently val is always required in your example
if (val) {
view_list.style.display = styleMapping[optval];
}
这样做的好处是,无需编写大量代码即可轻松地重构和添加新样式。只需在映射中添加一行即可完成。当然,它更具可读性,更接近你打算做的事情。
您并不真正关心布尔逻辑,您只想根据optval
的设置来设置不同的样式。
答案 3 :(得分:1)
因为还没有人说过,switch
if (val === true)
switch (optval) {
case 'car':
case 'truck':
view_list.style.display = 'none';
break;
case 'buss':
case 'van':
view_list.style.display = '';
break;
}