javascript - 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
,如果在对象中,它将检索关联的值。
推荐阅读
- linux - 将 platform_driver 与 i2c_driver 组合在一起的内核驱动程序
- python-3.x - 如何在 keras 模型中实现汉明损失作为自定义指标
- django - Django 无法显示提供的注销模板
- python - 让 subprocess.Popen 只等待其子进程返回,而不是任何孙子进程
- python - 熊猫 df 循环 + 合并
- laravel - SQLSTATE[IM002] SQLDriverConnect: 0 [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified in Laravel
- xamarin.forms - 选择器将源绑定到列表并从另一个对象中选择值
- azure - Azure 服务总线客户端批处理如何保证消息不丢失?
- apache-spark - 当不满足所有选择条件时,Spark 将选择哪个连接?
- reactjs - 在 Material UI 中通过样式化 API 使用多个 CSS 规则名称