我有多个条件需要检查和执行,如下所示。
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";
}我认为在这里使用switch语句是没有意义的,因为我们并不是针对开关表达式来计算case语句表达式。
那么,是否可以使用多个if better语句或任何更好的替代方法?
发布于 2020-09-02 16:14:43
您的代码是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";
}其他选项是使用三元运算符。
var isCurrent = date == current_date;
var isS3 = source === "s3";
if (isCurrent) {
table_name = isS3 ? "Table1" : "Table2";
} else {
table_name = isS3 ? "Table3" : "Table4";
}它可能是一个大的三元,但它有点不可读。
var isCurrent = date == current_date;
var isS3 = source === "s3";
table_name = isCurrent ?
(isS3 ? "Table1" : "Table2") :
(isS3 ? "Table3" : "Table4");发布于 2020-09-02 15:55:00
在这种特殊情况下,如果我们将其简化为嵌套的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";
}
}这样做最多可以进行2次逻辑比较,并使用程序控制,同时实现相同的逻辑结果,而您的结果将占用更多的时间。8?
但在这一点上,这主要是一个挑选风格的问题,评论有一些好主意。例如,如果您期望这种逻辑增长,那么使用映射/对象来存储这些信息就更有意义了。
是的,转换语句没有多大意义。
发布于 2020-09-02 16:03:01
这是我的“最过度设计的解决方案”竞赛的申请:
const bools = [
date === current_date,
source === "s3",
// more?
];
const mask = bools.reduce((x, e) => x + +e, "");
// [ false, false ] --> 00
// [ true, false ] --> 10
// [ false, true ] --> 01
// [ true, true ] --> 11
switch (mask) {
case "00":
table_name = "Table4";
break;
case "01":
table_name = "Table3";
break;
case "10":
table_name = "Table2";
break;
case "11":
table_name = "Table1";
break;
default:
// noop
break;
}如果您愿意的话,这里可能是switch的另一个掩码,这次是数字的:
const mask = bools.reduce((x, e, i) => x + e * Math.pow(2, i), 0);
// [ false, false ] --> 0
// [ true, false ] --> 1
// [ false, true ] --> 2
// [ true, true ] --> 3否则,只需使用好的ol‘ifs :)
https://stackoverflow.com/questions/63709001
复制相似问题