当前位置: 首页 > 知识库问答 >
问题:

多个“如果”语句?

商和颂
2023-03-14

假设我有一个类似下面的函数checkTime,我必须同时检查多个条件。

var result=0;
function checkTime(time1, time2) {

    if (time1 >= 0 && time2 <= 0) {
        result = 1;
    }
    else if (time1 >= 0 && time2 <= 1) {
        result = 4;
    }
    else if (time1 >= 2 && time2 <= 3) {
        result = 5;
    }
    else if (time1 >= 4 && time2 <= 6) {
        result = 6;
    }
    else if (time1 >= 7 && time2 <= 9) {
        result = 7;
    }
    else if (time1 >= 11 && time2 <= 12) {
        result = 8;
    }
    else if (time1 >= 13 && time2 <= 15) {
        result = 9;
    }
    else if (time1 >= 16 && time2 <= 17) {
        result = 10;
    }
    else if (time1 >= 19 && time2 <= 20) {
        result = 11;
    }
    return result;
}

(上述示例是假设的)

我使用的函数完全有效,但是:

  • 有没有更好的方法、程序或公式来取代这一点?(不必如此冗长或丑陋)

Thanx!

共有3个答案

邹高峻
2023-03-14

首先,你有可能得到一个未定义的结果,这使得事情变得模棱两可。结果应该从0开始吗?这是一个重要的细节。其次,您似乎在处理边界,因此这将有助于更改<代码>

var result = 0;
var diff = time2 - time1;
var bounds = [21, 19, 16, 13, 11, 7, 4, 2, 0];
if (diff <= 0) result = 0; // unexpected outcome
else
    for (position = 1; position < bounds.length; ++position) {
        if (time1 >= bounds[position]) {
            if (time2 < bounds[position - 1]) {
                result = 3 + (bounds.size - position);
            }
            break;
        }
    }
return result;

其他实现是可能的,但是很难根据你的问题来判断你到底在解决什么问题。

后续行动

这段代码有一个空白:

else if (time1 >= 7 && time2 <= 9) {
    result = 7;
}
else if (time1 >= 11 && time2 <= 12) {
    result = 8;
}

如果时间=10和时间2=10,则不存在匹配。当你重复自己的时候,很容易错过这种错误。为每个条件指定下限和上限是不必要的重复。因为我看不到边界的模式(可以委托给函数),所以我只是将下限放入一个数组中,并确保它按降序排序,以便循环可以在第一次匹配后停止。

巫马浩言
2023-03-14

如果代码相同,并且只有值更改,则可以执行以下操作:

function checkTime(time1, time2) {
  [
    [0, 0, 0], 
    [0, 1, 0]
  ].forEach(function (it) {
    if (time1 >= it[0] && time2 <= it[1]) {
       return it[2];
    }
  });
}
陆曜文
2023-03-14

可以使用数组来表示所有组合:

tests = [
    { time1: 0, time2: 0, result: 1 },
    { time1: 0: time2: 1, result: 4 },
    ...
];

for (var i = 0; i < tests.length; i++) {
    if (time1 >= tests[i].time1 && time2 <= tests[i].time2) {
        return tests[i].result;
    }
}
 类似资料:
  • 问题内容: 我最近发现了简写if语句,并且在网上搜索后找不到明确的答案。 如果条件为真/假,是否可以执行2条语句? 例如 看到我没有碰到他们使用它的示例,我想这是不可能的,但我不想错过 问题答案: 您正在谈论条件分配。您应该查看所编写的内容所定义的内容: 那就是在评估“表达式”,如果是,则执行“ 1 AND 2”,然后将值赋给x。如果将“表达式”评估为假,则将评估“ 3”并将其分配给x。因此,您绝

  • 我有一个以字符串形式返回sql查询的方法。此方法考虑参数“level”,基于此参数有多个if-else语句,如 将来的级别数量会增加,我不想写讨厌的 if else 语句,所以我正在寻找适用于这种情况的更清洁且可维护的设计方法。我正在考虑策略设计模式,但不确定它是否最适合这种情况。

  • 问题内容: 嗨,我想运行一个if语句,但是在我所有的AS别名附近都会不断出现语法错误,我在做什么错? 问题答案: 有两个问题。缺少BEGIN以及SELECT都需要在每个IF语句内。您不能在SELECT中包含内联IF,如果需要执行此操作,则可以使用CASE语句。

  • 问题内容: 我目前正在制作一份报告,向我显示我们销售团队涵盖的所有邮政编码。 每个团队涵盖100多个邮政编码。我想做的是创建一个报告,将邮政编码内的客户带回去。目前,我的代码如下所示。 我希望的是有一种更快,更轻松的方式来做到这一点。任何建议将不胜感激。有没有一种方法可以为每个销售团队创建变量,例如 只是在钓鱼的想法。干杯 问题答案:

  • 本文向大家介绍Lua 多个结果,包括了Lua 多个结果的使用技巧和注意事项,需要的朋友参考一下 示例 Lua中的函数可以返回多个结果。 例如: 调用函数时,要保存这些值,必须使用以下语法: 这将导致a = b = c = 5这种情况。也可以通过在变量_列表中的所需位置使用抛弃型变量来忽略返回的值: 在这种情况下,第二个返回值将被忽略。通过不将返回值分配给任何变量,也可以忽略返回值: 变量a将被分配

  • 问题内容: 我想一次执行多个查询或作业。像这样的东西: 或多个选择查询。查询将是动态的。 但是我无法做到这一点,以半冒号分隔的多个查询的运行方式是什么? 问题答案: 您可以使用以下示例实现addBatch和executeBatch命令同时执行多个 SQL 命令。 批处理允许您将相关的SQL语句分组为一个批处理,并通过一次调用将其提交给数据库。参考 当您一次将多个SQL语句发送到数据库时,可以减少通