有没有一种更简单的方法可以使多个输入等于一个

Is there an easier way to make many inputs equal one?

本文关键字:可以使 输入 于一个 方法 更简单 一种 有没有      更新时间:2023-09-26

好的,现在我正在写一个脚本,你必须知道事情发生的频率,以及我用"Monthly"表示每月一次的脚本。但很明显,人们可能不只是对"月刊"。

所以我写这封信是为了防止他们写其他东西。

if (RepeatDay === "once a month" || RepeatDay === "Once a Month" || RepeatDay === "every month" || RepeatDay === "month" || RepeatDay === "Month" || RepeatDay === "monthly"|| RepeatDay === "Once A Month"){
    var RepeatDay = "Monthly"
}

问题是我有很多这样类型的输入,我想知道是否有更简单的方法。

您可以使用

if(RepeatDay.toLowerCase().indexof('month')>-1){
    var RepeatDay = "Monthly";
}

但正如评论中所建议的,在这种情况下,最好给用户下拉列表,而不是文本输入

如前所述,我强烈建议用户从您控制的一组选项中进行选择。

不过,如果你真的想对照这样的列表进行检查,你有几个选项(很可能都与toLowerCase结合起来,以减少你必须测试的东西的数量):

  1. 您可以使用Ankit演示的数组。

  2. 您可以使用switch语句,它还可以让您轻松地映射其他值,如"周",例如:

    switch (RepeatDay.toLowerCase()) {
        case "once a month";
        case "every month";
        case "month";
        case "monthly":
            RepeatDay = "Monthly"
            break;
        case "weekly":
        case "once a week":
            RepeatDay = "Weekly";
            break;
        // ...
    }
    
  3. 你可以使用一个对象作为地图,这再次使绘制"每周"地图变得容易,例如:

    var repeatOptions = {
        "once a month": "Monthly",
        "every month": "Monthly",
        "month": "Monthly",
        "monthly": "Monthly",
        "weekly": "Weekly",
        "once a week": "Weekly",
        // ...
    };
    

    然后:

    RepeatDay = repeatOptions[RepeatDay.toLowerCase()];
    if (!RepeatDay) {
        // Invalid option specified
    }
    

我建议您以不同的方式收集用户输入数据。

带有选项的下拉列表对您和用户都更有用。

其他答案可能会奏效。但是,请考虑用户仍然需要输入值——他们需要添加某些单词的数字,以便输入按预期工作。您将在代码中以许多不必要的解释消息或验证结束。

不知道你的确切建议,但在间隔类型(每月、每周、每年、每天)和输入类型编号之间进行选择的下拉列表应该有效,而且会更直观。

对于mi,这是您需要注意的有效值。

(x是随机次数)

每个月

xm

x表示月份

x倍

x M

每10个

一次m

每个m 的第一天

仅在六月

等等…

你不想要一个由一千个案例组成的数组,显然你无法验证单词month或单词m的存在(请再次查看六)。

您可以创建阵列

var arr=["once a month","Once a Month","every month","month" ,"Month","monthly","Once A Month"]
if(arr.indexOf(RepeatDay)!==-1){
     RepeatDay='monthly';
}

注意:indexOf在IE<9所以你需要用的经典方式

for(var i=0;i<arr.length;i++){
    if(arr[i]===RepeatDay){
        RepeatDay="monthly";
        break;   //no need to check for further after a match is found
    }
}