rub*_*ist 11 javascript ecmascript-6
我有多个条件需要检查和执行,如下所示。
if (date == current_date && source === "s3") {
table_name = "Table1";
} else if (date == current_date && source !== "s3") {
table_name = "Table2";
} else if (date !== current_date && source === "s3") {
table_name = "Table3";
} else if (date !== current_date && source !== "s3") {
table_name = "Table4";
}
Run Code Online (Sandbox Code Playgroud)
我认为在这里使用 switch 语句没有意义,因为我们没有针对 switch 表达式评估 case 语句表达式。
那么可以使用多个 if else 语句或任何更好的替代方法吗?
您的代码 100% 是一个不错的选择。只是有点难以阅读。您可以将公共代码提取到变量中以使其更具可读性
var isCurrent = date == current_date;
var isS3 = source === "s3";
if (isCurrent && isS3) {
table_name = "Table1";
} else if (isCurrent && !isS3) {
table_name = "Table2";
} else if (!isCurrent && isS3) {
table_name = "Table3";
} else {
table_name = "Table4";
}
Run Code Online (Sandbox Code Playgroud)
其他选择是使用三元运算符
var isCurrent = date == current_date;
var isS3 = source === "s3";
if (isCurrent) {
table_name = isS3 ? "Table1" : "Table2";
} else {
table_name = isS3 ? "Table3" : "Table4";
}
Run Code Online (Sandbox Code Playgroud)
它可能是一个大的三元组,但它有点不可读
var isCurrent = date == current_date;
var isS3 = source === "s3";
table_name = isCurrent ?
(isS3 ? "Table1" : "Table2") :
(isS3 ? "Table3" : "Table4");
Run Code Online (Sandbox Code Playgroud)
在这种特殊情况下,如果我们将其简化为嵌套的 if 语句,可能会更合乎逻辑地理解:
if (date == current_date) {
if (source === "s3") {
table_name = "Table1";
} else {
table_name = "Table2";
}
} else {
if (source === "s3") {
table_name = "Table3";
} else {
table_name = "Table4";
}
}
Run Code Online (Sandbox Code Playgroud)
这确实最多进行 2 次逻辑比较并改用程序控制,同时实现相同的逻辑结果,而您的最多需要...... 8?
但在这一点上,它主要是一个挑剔的风格问题,评论中有一些好主意。例如,如果您期望此逻辑增长,则使用地图/对象来存储此信息会更有意义。
是的,switch 语句没有多大意义。