Javascript 使用多个参数创建检查以生成三个不同的结果

Javascript 使用多个参数创建检查以生成三个不同的结果,javascript,if-statement,switch-statement,Javascript,If Statement,Switch Statement,我需要找到最简洁的方法来返回基于两个参数的三个值中的一个。我认为switch语句是最简洁的,但请提出替代方案 我有两个参数,type和action 如果action==“close”,则返回的结果应始终是“Hide” 如果action==open则需要进行更多检查 如果action=='open'&&type=='flight'返回显示更多航班 如果action=='open'&&type=='protection'返回显示保护 在不涉及多个嵌套的if语句的情况下,最简洁的方法是什么?整个语句已

我需要找到最简洁的方法来返回基于两个参数的三个值中的一个。我认为switch语句是最简洁的,但请提出替代方案

我有两个参数,
type
action

如果
action==“close”
,则返回的结果应始终是
“Hide”

如果
action==open
则需要进行更多检查

如果
action=='open'&&type=='flight'
返回
显示更多航班

如果
action=='open'&&type=='protection'
返回
显示保护

在不涉及多个嵌套的
if
语句的情况下,最简洁的方法是什么?整个语句已经在另一个三元调用的
if
语句中,所以我不想再添加更多

这是我目前的解决方案,有没有办法让它更轻

createShowLabels: function(testEnabled,action,type){
                if (testEnabled){
                    if(action === 'open'){
                        switch(type) {
                            case 'flight':
                                return 'Show flight times';
                            case 'protection':
                                return 'What\'s this?';
                        }
                    } else {
                        return 'Hide';
                    }
                } else {
                    // Defaults
                    if (action === 'open'){
                        return 'Show more';
                    } else {
                        return 'Show less';
                    }
                }
            },
首先,让我们明确一点:“简洁”不是“好”、“可读”或“可维护”的同义词;有时候,事实并非如此

如果您在评论中保证值将仅为列出的值,有几种方法

在我自己的代码中,我可能会使用类似somnething但格式不同的somnething:

if (action == 'close') {
    result = 'Hide';
} else if (type == 'flight') {
    result = 'show more flights';
} else {
    result = 'show protections';
}
但你要求的是最简洁的方式。条件运算符简洁,但不一定非常易于调试:

result = action == 'close' ? 'Hide' : type == 'flight' ? 'show more flights' : 'show protections';
例如:

功能测试(动作、类型){
返回操作==“关闭”?“隐藏”:类型==“航班”?“显示更多航班”:“显示保护”;
}
控制台日志(测试(‘关闭’、‘飞行’);
日志(测试(‘关闭’、‘保护’);
控制台日志(测试(‘打开’、‘飞行’);

日志(测试(‘打开’、‘保护’)如果你想要的是短小精悍的措辞,这不是你想要的。这是一种非常简单且易读的写你想要的东西的方法:

if (action == 'close') {
   return 'Hide';
}
else if (action = 'open') {
    if      (type = 'flight'    ) {return 'show more flights'}
    else if (type = 'protection') {return 'show protections' }
}

您尝试了什么?可以假设
操作
类型
仅具有上面列出的值吗?@T.J.Crowder是,
操作
只能是
打开/关闭
类型
只能是
飞行/保护
您不需要在
返回后
中断
:)我理解您对嵌套东西的担忧,但是一个很好的解决方案是以一种非常容易理解其结构和层次结构的方式编写代码。你可以在我下面的回答中找到我认为是一个很好的例子。然而,请注意,有很多口味观点,因此没有明确和普遍的规则。想象一下,其他人需要阅读你的代码,你想让他/她的生活更轻松。你认为我上面的解决方案是更好还是更糟?我不想增加不必要的复杂性,因为我正试图写更少的代码。不过,上面的解决方案似乎很冗长。有中间的吗?谢谢你提供了几个详细的例子。