20

可能重复:
JavaScript 中的 array.contains(obj)

就像是:

if (mystring == "a" || mystring == "b" || mystring =="c")

我想做:

if (mystring in ("a", "b", "c"))

是否可以?

4

9 回答 9

23

你可以这样indexOf()使用

if ( [ 'a', 'b', 'c' ].indexOf( mystring ) > -1 ) { ... }

编辑使用 ES7 进行了一些简化。截至今天,只有 Chrome 47+ 和 FF 43+ 似乎支持它:

if ( [ 'a', 'b', 'c' ].includes( mystring ) ) { ... }
于 2012-10-08T12:55:47.147 回答
5

使用 indexOf 是首先想到的,但是您必须记住,在较旧的 IE 中没有.indexOf功能(因此您必须使用自定义代码来模拟它,或者直接使用jQuery.inArrayunderscore.js indexOf)。

if ([ 'a', 'b', 'c' ].indexOf( mystring ) > -1 ) { ... }

旁注:正如您通过查看 jQuery 源代码中的 inArray 定义所看到的,编写自己的 indexOf 替换非常容易。所以就像我说的 - 编写你自己的方法,从其他库复制粘贴它,或者如果你希望能够在每个浏览器中使用 indexOf,就使用这些库。

于 2012-10-08T12:57:25.360 回答
4

你可以用老办法

a = "a";
b = ["a","b","c","d"];


function check(a,b){
    i = 0;        
    for (i=0;i<b.length;i++) {
        if (a === b[i]) {
            return true;
        }
    }
    return false;
}

alert(check (a,b))

请注意indexOf 是 ECMA-262 标准的最新补充;因此,它可能不会出现在所有浏览器

于 2012-10-08T12:59:00.383 回答
1

您可以使用indexOf

[1,2,3].indexOf(1) will give 0
[1,2,3].indexOf(4) will give -1

因此,您可以检查 indexOf 是否返回 -1。

类似的字符串。

于 2012-10-08T12:56:10.010 回答
1

我认为是这样的:

if (["a", "b", "c"].indexOf(mystring) != -1) {
    // do something
}
于 2012-10-08T13:01:09.337 回答
1
if (["a", "b", "c"].indexOf(mystring) != -1) {}

这将是最好的方法,但它可能不适用于某些浏览器。

于 2012-10-08T13:19:21.243 回答
0

您的版本是三个字符中最快的版本,也是最易读的版本。

使用更多可能的值,您可以使用以下内容:

var c;
if (s.length==1 && (c=s.charAt(0))>='a' && c<='c') {

但这主要是为了好玩...

于 2012-10-08T12:58:34.880 回答
0

另外:您可以为比较创建一个字符串扩展名:

String.prototype.in = function(){
  return  ~[].slice.call(arguments).indexOf(this.valueOf()) ? true : false;
}
//usage
var myStr = 'a';
myStr.in('a','b','c'); //=> true
'd'.in('a','b','c');   //=> false

对于较旧的浏览器:此MDN 页面包含用于Array.indexOf

于 2012-10-08T13:24:21.597 回答
-1

就像是

foreach (str in strings) { 
    if (mystring.contains(str)) { 
        ... 
    } 
}

可能工作。

于 2012-10-08T12:57:07.090 回答