Определите, находится ли строка в списке в JavaScript

В 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 не будет работать исходно без небольшого количества сахара синтаксиса.

230
задан ErikE 25 June 2018 в 09:32
поделиться

6 ответов

В дополнение к indexOf (который предлагали другие авторы), использование прототипа Enumerable.include () может сделать это более аккуратным и кратким:

var list = ['a', 'b', 'c'];
if (list.include(str)) {
  // do stuff
}
5
ответ дан 23 November 2019 в 03:41
поделиться

Похоже, вам нужно использовать функцию in_array.

jQuery -> inArray

Prototype -> Array.indexOf

Или посмотрите эти примеры, если вы не используете jQuery или Prototype:

Стилистическое примечание: переменные, названные thisthing thatthing, должны быть названы так, чтобы рассказывать вам что-то о том, что они содержат (существительное).

5
ответ дан 23 November 2019 в 03:41
поделиться

В большинстве ответов предлагается метод Array.prototype.indexOf , единственная проблема в том, что он не будет работать на любая версия IE до IE9.

В качестве альтернативы я оставляю вам еще два варианта, которые будут работать во всех браузерах:

if (/Foo|Bar|Baz/.test(str)) {
  // ...
}


if (str.match("Foo|Bar|Baz")) {
  // ...
}
52
ответ дан 23 November 2019 в 03:41
поделиться

Уловка, которую я использовал:

>>> ("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
11
ответ дан 23 November 2019 в 03:41
поделиться

Вы можете вызвать indexOf:

if (['a', 'b', 'c'].indexOf(str) >= 0) {
    //do something
}
256
ответ дан 23 November 2019 в 03:41
поделиться

Массивы имеют метод indexOf, который можно использовать для поиска строк:

js> a = ['foo', 'bar', 'baz']
foo,bar,baz
js> a.indexOf('bar')
1
js> a.indexOf('quux')
-1
27
ответ дан 23 November 2019 в 03:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: