Возможный дубликат:
array.contains(obj) в JavaScript
Что-то вроде:
if (mystring == "a" || mystring == "b" || mystring =="c")
Я прыгал:
if (mystring in ("a", "b", "c"))
Возможно ли это?
Возможный дубликат:
array.contains(obj) в JavaScript
Что-то вроде:
if (mystring == "a" || mystring == "b" || mystring =="c")
Я прыгал:
if (mystring in ("a", "b", "c"))
Возможно ли это?
Вы можете использовать indexOf()
, как этот
if ( [ 'a', 'b', 'c' ].indexOf( mystring ) > -1 ) { ... }
EDIT С ES7 немного упрощается. На сегодняшний день только Chrome 47+ и FF 43+, похоже, поддерживают его:
if ( [ 'a', 'b', 'c' ].includes( mystring ) ) { ... }
Использование indexOf - это первое, что приходит на ум, однако вы должны иметь в виду, что нет функции .indexOf
в более старых IE (так что вам придется использовать свой собственный код для имитации это или просто перейти к чему-то вроде jQuery.inArray или underscore.js IndexOf).
if ([ 'a', 'b', 'c' ].indexOf( mystring ) > -1 ) { ... }
Боковое примечание: как вы можете видеть, посмотрев определение inArray в источнике jQuery, запись собственной замены indexOf довольно проста. Так, как я уже сказал, напишите свой собственный метод, скопируйте его из других библиотек или просто используйте эти библиотеки, если вы хотите иметь возможность использовать indexOf в каждом браузере.
Вы могли бы сделать это по-старому.
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 или выше
Вы можете использовать indexOf
[1,2,3].indexOf(1) will give 0
[1,2,3].indexOf(4) will give -1
Итак, вы можете проверить, возвращает ли indexOf -1.
Аналогично для строк.
Я думаю, что-то вроде этого:
if (["a", "b", "c"].indexOf(mystring) != -1) {
// do something
}
if (["a", "b", "c"].indexOf(mystring) != -1) {}
Это будет лучший способ, однако он может не работать в некоторых браузерах.
Что-то вроде
foreach (str in strings) {
if (mystring.contains(str)) {
...
}
}
может работать.
Ваша версия является самой быстрой для трех символов и наиболее читаемой.
С немного более возможными значениями вы можете использовать что-то вроде этого:
var c;
if (s.length==1 && (c=s.charAt(0))>='a' && c<='c') {
Но это в основном для удовольствия...
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