Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有更简单的方法使多个输入等于一个?_Javascript - Fatal编程技术网

Javascript 有没有更简单的方法使多个输入等于一个?

Javascript 有没有更简单的方法使多个输入等于一个?,javascript,Javascript,好的,现在我正在写一个脚本,你必须把事情发生的频率和我用“每月”来表示每月一次的脚本放在这里。 但很明显,人们可能不只是“每月”一次 所以我写这封信是为了以防万一他们写别的东西 if (RepeatDay === "once a month" || RepeatDay === "Once a Month" || RepeatDay === "every month" || RepeatDay === "month" || RepeatDay === "Month" || RepeatDay ==

好的,现在我正在写一个脚本,你必须把事情发生的频率和我用“每月”来表示每月一次的脚本放在这里。 但很明显,人们可能不只是“每月”一次

所以我写这封信是为了以防万一他们写别的东西

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";
}

但正如评论中所建议的,在这种情况下,最好给用户提供下拉列表,而不是文本输入。您可以创建一个数组

var arr=["once a month","Once a Month","every month","month" ,"Month","monthly","Once A Month"]

if(arr.indexOf(RepeatDay)!==-1){
     RepeatDay='monthly';
}

注意:不适用于IE正如已经指出的,我强烈建议用户从您控制的一组选项中进行选择

但是,如果您真的想对照这样的列表进行检查,您有几个选项(所有选项都很可能与
toLowerCase
相结合,以减少需要测试的内容的数量):

  • 可以使用数组

  • 您可以使用
    switch
    语句,它还可以让您轻松映射其他值,如“weekly”等:

    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;
        // ...
    }
    
  • 您可以将对象用作贴图,这同样使“每周”贴图变得容易,例如:

    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天

    曾经

    每个月的第一天

    只在六月

    等等


    你不想要一个包含数千个案例的数组,显然你无法验证单词month或单词m是否存在(再次参见示例)。

    你让他们自由进入这个时期?正如j0评论的那样,为什么不给他们一个下拉菜单呢。强制他们使用下拉菜单。。。否则,您将处理无限的用户输入可能性。如果他们不使用单词month,只使用“M”或者如果他们输入了另一个奇怪的值呢?因为我也希望他们能够输入天数,如果我使用1-31的下拉菜单,那么底部的单词Monthly可能看起来有点奇怪。不要重新发明轮子:输入时间段是一种常见的操作,没有人接受自由形式的输入。你的反对是基于一个关于如何做的过于简单的想法;查看计算机(或智能手机)中的约会功能,了解一些想法。if中的var将被代码破坏。一定要删除它。哈哈,这么复杂?看:)@nicael,对于许多不需要的值,它将返回true,因为它只需搜索子序列“month”@Anonymous就可以工作。代码太简单了,为什么需要测试它?这实际上是我在寻找的。我不知道为什么,但我没有想到一个数组。谢谢:DBoby,这可以工作。但扩展性还不够。看看我的答案,它解释了为什么
    “一个月四次”
    @MatthewMcveigh,如果你看到OP想要捕捉这样的字符串。问题中提到的那些人并不是他想抓住的唯一的人。他提到,但显然,人们可能不只是“每月”才对。我写这封信是为了以防万一。理想情况下,正如评论中所建议的,在这种情况下,固定值输入(如下拉列表)更可取。
    RepeatDay = repeatOptions[RepeatDay.toLowerCase()];
    if (!RepeatDay) {
        // Invalid option specified
    }