JS Ternary具有多种条件?

时间:2017-07-10 22:11:10

标签: javascript if-statement conditional ternary-operator

我一直在JavaScript中使用三元运算符来根据用户输入修改对象的值。我有以下代码,它应该运行:

var inputOneAns = inputOne == "Yes" ? "517" : "518";

如您所见,我正在为inputOneAns分配一个数字字符串值,无论用户是输入“是”还是“否”。但是,可能存在用户未选择值的情况(因为不需要)。如果此输入留空,我想将空字符串“”分配给inputOneAns。有没有方法或我将三元运算符嵌入另一个三元运算符?为了帮助澄清,这里有一个函数,我想用我的三元函数来同时使用if else语句?

if (inputOne == "Yes"){
    var inputOneAns = "517"
}else if (inputOne == "No"{
    var inputOneAns = "518"
}else{
    var inputOneAns = ""
}

是否可以将多个表达式包含在三元函数中?有没有更好的方法来完成我正在寻找的东西?感谢提前提示。

9 个答案:

答案 0 :(得分:13)

是的,你可以去野生筑巢三角。我发现这个版本相当可读:

var foo = (
  bar === 'a' ? 1 : // if 
  bar === 'b' ? 2 : // else if 
  bar === 'c' ? 3 : // else if
  null // else 
);

但这不是一个广泛分享的观点,在团队工作时你应该坚持if/elseswitch

答案 1 :(得分:3)

在这种情况下,switch语句可能是最佳选择。

let inputOneAns;
switch(inputOne) {
  case "Yes":
   inputOneAns = "517";
   break;
  case "No":
   inputOneNas = "518";
   break;
  default:
   inputOneNas = "";
}

如果你可以在超过2个条件的情况下进行三元操作,它们将变得非常混乱。你可以将条件放在一起,但我不知道你为什么会这样 - 那将是令人难以置信的凌乱。

答案 2 :(得分:1)

var r = inputOne == "" ? "" : ( 
inputOne == "Yes" ? "517" : "518");

答案 3 :(得分:1)

不幸的是,JavaScript并没有提供超级简洁易读的方法。就个人而言,我只会使用这样的单行if语句:

var inputOneAns;
if (inputOne === 'Yes') inputOneAns = '517';
if (inputOne === 'No') inputOneAns = '518';
else inputOneAns = '';

如果将它抽象为函数,哪个更干净(注意:在这种情况下不需要else):

function getInputOneAns(inputOne) {
    if (inputOne === 'Yes') return '517';
    if (inputOne === 'No') return '518';
    return '';
}

就个人而言,我真的不喜欢这样的switch语句有两个原因:首先是那些额外的break语句膨胀代码,其次,switch语句是非常有限的 - 你只能进行简单的相等检查,并且仅针对单个变量。此外,如果您知道将始终检查单个字符串,我会赞成一个简单的地图对象:

var map = { 'Yes': '517', 'No': '518' };
var inputOneAns = map[inputOne] || '';

答案 4 :(得分:0)

是的,你可以将它们链接在一起,就像使用else if语句一样,但它有时候有点难以阅读,所以我倾向于将我的分裂为多行。

var inputOneAns = inputOne == 'Yes' ? '517' :
  inputOne == 'No' ? '518' : '';

但是在这种情况下,我会建议switch语句,因为你在比较每个案例的相同值。

答案 5 :(得分:0)

看起来像是switch语句的经典用法:

let inputOneAns = '';
switch(inputOne) {
  case 'Yes':
    inputOneAns = "517";
    break;
  case 'No': 
    inputOneAns = "518";
    break;
  default:
    inputOneAns = "";
}
  • 请注意,您实际上并不需要默认情况,但我发现它使事情更具可读性。

答案 6 :(得分:0)

最优雅,最简洁的方法是利用Object文字:

const Switch = (str) => ({
  "Yes": "517",
  "No": "518",
})[str] || '';

console.log(Switch("Yes")); // 517
console.log(Switch("No"));  // 518
console.log(Switch("Non matching value")); // Empty

这具有可读性和灵活性的优点。

答案 7 :(得分:0)

是的,并且确实提供了比switch语句更干净的代码。所有中断。

inputOne == "Yes" ? "517" :
inputOne == "No" ? "518" : inputOneAns = "";

答案 8 :(得分:0)

是的,您可以在三元运算符中使用多个条件。希望对您有帮助。

var x=20;
var y = x<13 ? "Child" : x<20 ? "Teenage" : x<30 ? "Twenties" : "Old people";
console.log(y);