我一直在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 = ""
}
是否可以将多个表达式包含在三元函数中?有没有更好的方法来完成我正在寻找的东西?感谢提前提示。
答案 0 :(得分:13)
是的,你可以去野生筑巢三角。我发现这个版本相当可读:
var foo = (
bar === 'a' ? 1 : // if
bar === 'b' ? 2 : // else if
bar === 'c' ? 3 : // else if
null // else
);
但这不是一个广泛分享的观点,在团队工作时你应该坚持if/else
或switch
。
答案 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);