我怎样才能将两个陈述变成三元组

时间:2014-04-24 17:27:10

标签: javascript

我有两个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 = '';

4 个答案:

答案 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;
    }