首页 > 解决方案 > 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);

标签: javascriptruby

解决方案


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

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,如果在对象中,它将检索关联的值。


推荐阅读