В SQL мы видим, находится ли строка в списке как так:
Column IN ('a', 'b', 'c')
Что хороший путь состоит в том, чтобы сделать это в JavaScript? Это настолько неуклюже, чтобы сделать это:
if (expression1 || expression2 || str === 'a' || str === 'b' || str === 'c') {
// do something
}
И я не уверен в производительности или ясности этого:
if (expression1 || expression2 || {a:1, b:1, c:1}[str]) {
// do something
}
Или можно было использовать функцию переключателя:
var str = 'a',
flag = false;
switch (str) {
case 'a':
case 'b':
case 'c':
flag = true;
default:
}
if (expression1 || expression2 || flag) {
// do something
}
Но это - ужасная путаница. Какие-либо идеи?
В этом случае я должен использовать Internet Explorer 7, как это для корпоративной страницы интранет. Так ['a', 'b', 'c'].indexOf(str) !== -1
не будет работать исходно без небольшого количества сахара синтаксиса.
В дополнение к indexOf
(который предлагали другие авторы), использование прототипа Enumerable.include () может сделать это более аккуратным и кратким:
var list = ['a', 'b', 'c'];
if (list.include(str)) {
// do stuff
}
Похоже, вам нужно использовать функцию in_array.
jQuery -> inArray
Prototype -> Array.indexOf
Или посмотрите эти примеры, если вы не используете jQuery или Prototype:
Стилистическое примечание: переменные, названные thisthing thatthing, должны быть названы так, чтобы рассказывать вам что-то о том, что они содержат (существительное).
В большинстве ответов предлагается метод Array.prototype.indexOf
, единственная проблема в том, что он не будет работать на любая версия IE до IE9.
В качестве альтернативы я оставляю вам еще два варианта, которые будут работать во всех браузерах:
if (/Foo|Bar|Baz/.test(str)) {
// ...
}
if (str.match("Foo|Bar|Baz")) {
// ...
}
Уловка, которую я использовал:
>>> ("something" in {"a string":"", "somthing":"", "another string":""})
false
>>> ("something" in {"a string":"", "something":"", "another string":""})
true
Вы могли бы сделать что-нибудь вроде
>>> a = ["a string", "something", "another string"];
>>> b = {};
>>> for(var i=0; i<a.length;i++){b[a[i]]="";} /* Transform the array in a dict */
>>> ("something" in b)
true
Вы можете вызвать indexOf
:
if (['a', 'b', 'c'].indexOf(str) >= 0) {
//do something
}
Массивы имеют метод indexOf
, который можно использовать для поиска строк:
js> a = ['foo', 'bar', 'baz']
foo,bar,baz
js> a.indexOf('bar')
1
js> a.indexOf('quux')
-1