vs JavaScript开关情况下的Ruby情况
我来自Ruby世界,进入JavaScript世界。Ruby语言的一个特点是使用vs JavaScript开关情况下的Ruby情况,javascript,ruby,Javascript,Ruby,我来自Ruby世界,进入JavaScript世界。Ruby语言的一个特点是使用case语句来计算目标值: my_val=案例my_var 当“var1”时,则为“value1” 当“var2”时,则为“value2” 其他“价值3” 结束 #我的值计算为特定值 把我的 我可以用JavaScript做一些如上所述的简洁的事情吗?这是我得到的最接近的结果: 让myVal=null; 开关(myVar){ 案例“var1”: myVal=“value1”; 打破 案例“var2”: myVal=“v
case
语句来计算目标值:
my_val=案例my_var
当“var1”时,则为“value1”
当“var2”时,则为“value2”
其他“价值3”
结束
#我的值计算为特定值
把我的
我可以用JavaScript做一些如上所述的简洁的事情吗?这是我得到的最接近的结果:
让myVal=null;
开关(myVar){
案例“var1”:
myVal=“value1”;
打破
案例“var2”:
myVal=“value2”;
打破
违约:
myVal=“value3”;
}
//我的值计算为特定值
console.log(myVal);
您的代码可以工作:
让myVal=null;
设myVar='var1';
开关(myVar){
案例“var1”:
myVal=“value1”;
打破
案例“var2”:
myVal=“value2”;
打破
违约:
myVal=“value3”;
}
//我的值计算为特定值
console.log(myVal)代码>您可以使用具有三元值的对象来设置默认值,如下所示:
const obj={
“var1”:“value1”,
“var2”:“value2”,
“defaultVal”:“value3”//默认值
},
getVal=sVar=>obj中的sVar?obj[sVar]:obj[“defaultVal”];
//用例1:
console.log(getVal(“var1”);//从对象中获取“var1”
//用例2:
console.log(getVal(“foo”);//从对象中获取“foo”是不存在的,因此我们获取默认值
您可以使用&&
和|
中的|
:
让我的_var=“var2”;
让我的妻子来=
(my_var==“var1”和&“value1”)||
(my_var==“var2”和&“value2”)||
“价值3”;
console.log(my_val);
让我的_var2=“var3”;
让我的灵魂2=
(my_var2==“var1”和“value1”)||
(my_var2==“var2”和“value2”)||
“价值3”;
console.log(my_val2)
.as控制台{背景色:黑色!重要;颜色:石灰;}
.作为控制台包装{max height:100%!important;top:0;}
,或者如果它只返回值,则可以使用
let map=新映射([[“var1”、“value1”]、[“var2”、“value2”])
const getVar=myVar=>map.has(myVar)?map.get(myVar):“value3”
//使用
设myVar='var2'
myVar=getVar(myVar)
log(myVar)
只是关于第二种方法的旁注:如果一些var1
,var2
。。。如果在对象中定义了一个falsy
值(例如0
),您将得到默认值,而不是定义的falsy
值。@Shidersz您说得对。。我这样实现是因为我通常使用TypeScript,正如您所看到的,var1
,var2
是string
s。。但是是的,我完全同意你。。谢谢“case statement”-它实际上是一个表达式。我只想指出它在Coffeescript中就像在Ruby中一样有效。@maxpleaner是的,我也知道。正如coffeescript与Rails携手共进。但在前端(React)开发中,coffeescript似乎并不那么流行。