【问题标题】:if charAt equal to a list of characters如果 charAt 等于字符列表
【发布时间】:2014-02-18 11:29:11
【问题描述】:

我想要在 Javascript 中类似以下内容

如果 str.charAt(index) (在集合中) {".", ",", "#", "$", ";", ":"}

是的,我知道这一定很简单,但我似乎无法正确使用语法。我现在拥有的是

theChar = str.charAt(i);
if ((theChar === '.') || (theChar === ',') || (theChar === ... )) {
  // do stuff
}

这可行,但必须有更好的方法。

编辑:我这样做了,但不确定它是否好:

var punc = {
    ".":true,
    ",":true,
    ";":true,
    ":":true
};

if (punc[str.charAt[index]) { ...

【问题讨论】:

    标签: javascript charat


    【解决方案1】:

    用这些字符定义一个数组,然后简单地在数组中搜索。一种方法如下:

    var charsToSearch = [".", ",", "#", "$", ";", ":"];
    var theChar = str.charAt(i); /* Wherever str and i comes from */
    
    if (charsToSearch.indexOf(theChar) != -1) {
        /* Code here, the char has been found. */
    }
    

    【讨论】:

    • @L105 你确定吗?
    • 要做一个jsPerf。
    • 当您使用它时,也可以使用String.indexOf 制作一个,例如".,#$;:".indexOf(theChar) !== -1。虽然我认为性能对这个 sn-p 影响不大。
    • In my test String indexOf 在 Firefox 中最快,其次是正则表达式,然后是数组。在 Chrome 中则相反。
    • 在我的测试中,正则表达式在 chrome 中慢了 59%。 jsperf.com/regexndexof,第二次:慢 9%。
    【解决方案2】:

    你可以用正则表达式来做到这一点:

    var theChar = str.charAt(i);
    if (/[.,#$;:]/.test(theChar)) {
      // ...
    }
    

    【讨论】:

    • 对新的 JavaScript 程序员不是很友好,但我想展示一个实用的解决方案还是不错的。
    • @MattiasBuelens 我想这取决于新的 JavaScript 程序员来自哪里 :) 当我学习 JavaScript 时,我已经知道正则表达式很长时间了。
    • 啊,这就是我想要做的,但十次我被套路分心了。
    猜你喜欢
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 2018-03-16
    相关资源
    最近更新 更多