Подтвердить что ты не робот

Как я могу сравнить строку с несколькими значениями?

Возможный дубликат:
array.contains(obj) в JavaScript

Что-то вроде:

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

Я прыгал:

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

Возможно ли это?

4b9b3361

Ответ 1

Вы можете использовать indexOf(), как этот

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

EDIT С ES7 немного упрощается. На сегодняшний день только Chrome 47+ и FF 43+, похоже, поддерживают его:

if ( [ 'a', 'b', 'c' ].includes( mystring ) ) { ... }

Ответ 2

Использование indexOf - это первое, что приходит на ум, однако вы должны иметь в виду, что нет функции .indexOf в более старых IE (так что вам придется использовать свой собственный код для имитации это или просто перейти к чему-то вроде jQuery.inArray или underscore.js IndexOf).

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

Боковое примечание: как вы можете видеть, посмотрев определение inArray в источнике jQuery, запись собственной замены indexOf довольно проста. Так, как я уже сказал, напишите свой собственный метод, скопируйте его из других библиотек или просто используйте эти библиотеки, если вы хотите иметь возможность использовать indexOf в каждом браузере.

Ответ 3

Вы могли бы сделать это по-старому.

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; как таковой, он не может присутствовать во всех браузерах. Если вы собираетесь использовать это с IE, он будет работать только с версией 9 или выше

Ответ 4

Вы можете использовать indexOf

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

Итак, вы можете проверить, возвращает ли indexOf -1.

Аналогично для строк.

Ответ 5

Я думаю, что-то вроде этого:

if (["a", "b", "c"].indexOf(mystring) != -1) {
    // do something
}

Ответ 6

if (["a", "b", "c"].indexOf(mystring) != -1) {}

Это будет лучший способ, однако он может не работать в некоторых браузерах.

Ответ 7

Что-то вроде

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

может работать.

Ответ 8

Ваша версия является самой быстрой для трех символов и наиболее читаемой.

С немного более возможными значениями вы можете использовать что-то вроде этого:

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

Но это в основном для удовольствия...

Ответ 9

Addtionally: вы можете создать расширение String для сравнения:

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