繁体   English   中英

Ruby case-when vs JavaScript switch-case

[英]Ruby case-when vs JavaScript switch-case

我来自Ruby世界并进入JavaScript世界。 Ruby语言的一个特性是用于评估目标值的case语句:

my_val = case my_var
           when "var1" then "value1"
           when "var2" then "value2"
           else "value3"
         end

# my_val evaluated to a specific value 
puts my_val

我可以像上面那样在JavaScript中做一些简洁的事吗? 这是我得到的最接近的:

let myVal = null;
switch (myVar) {
  case "var1": 
    myVal = "value1";
    break;
  case "var2":
    myVal = "value2";
    break;
  default:
    myVal = "value3";
}

// my_val evaluated to a specific value 
console.log(myVal);

您可以使用具有三元组的对象来设置默认值,如下所示:

 const obj = { "var1":"value1", "var2":"value2", "defaultVal": "value3" // default value }, getVal = sVar => sVar in obj ? obj[sVar] : obj["defaultVal"]; // Use case 1: console.log(getVal("var1")); // get "var1" from the object // Use case 2: console.log(getVal("foo")); // get "foo" from the object, doesn't exsist, so we get the default value 

上面创建了一个对象,其中对象中的每个键都指向一个值(即myVar应该变成什么)。 如果myVar不在对象中,它将默认为defaultVal ,如果它在对象中,它将检索关联的值。

或者,如果只返回值,则可以使用Map

 let map = new Map([["var1","value1"], ["var2", "value2"]]) const getVar = myVar => map.has(myVar) ? map.get(myVar) : "value3" // Use let myVar = 'var2' myVar = getVar(myVar) console.log(myVar) 

你的代码有效:

 let myVal = null; let myVar = 'var1'; switch (myVar) { case "var1": myVal = "value1"; break; case "var2": myVal = "value2"; break; default: myVal = "value3"; } // my_val evaluated to a specific value console.log(myVal); 

但是没有switch语句的更好方法:

 const obj = { var1: 'value1', var2: 'value2', default: 'value3' }; const myVar = 'var1'; const myVal1 = obj[myVar] || obj.default; const myVal2 = obj['asdfasdf'] || obj.default; console.log(myVal1); console.log(myVal2); 

您可以使用布尔运算符 &&||来处理类似的事情 Javascript

 let my_var = "var2"; let my_val = (my_var === "var1" && "value1") || (my_var === "var2" && "value2") || "value3"; console.log(my_val); let my_var2 = "var3"; let my_val2 = (my_var2 === "var1" && "value1") || (my_var2 === "var2" && "value2") || "value3"; console.log(my_val2) 
 .as-console {background-color:black !important; color:lime;} .as-console-wrapper {max-height:100% !important; top:0;} 

侧面注意:此方法仅适用于原始Javascript值。 让我们看一下这种方法失败的一些例子:

 let my_var = [1,2,3]; let my_val = (my_var === "var1" && "value1") || (my_var === [1,2,3] && "value2") || "value3"; console.log(my_val); let my_var1 = {"a":"b"}; let my_val1 = (my_var1 === "var1" && "value1") || (my_var1 === {"a":"b"} && "value2") || "value3"; console.log(my_val1); let my_var2 = NaN; let my_val2 = (my_var2 === "var1" && "value1") || (my_var2 === NaN && "value2") || "value3"; console.log(my_val2); 
 .as-console {background-color:black !important; color:lime;} .as-console-wrapper {max-height:100% !important; top:0;} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM