Краткий способ сравнения с несколькими значениями
Рассмотрим следующее:
var a = 'jesus';
if(a == 'something' || a == 'nothing' || a=='anything' || a=='everything'){
alert('Who cares?');
}
Есть ли способ сделать это короче?
Есть ли что-нибудь в Javascript, например if (a=='bbb'||'ccc')
?
Кроме того, может ли помочь jQuery?
Ответы
Ответ 1
С регулярным выражением:
if (/^(something|nothing|anything|everything)$/.exec('jesus')) alert('Who cares?');
Или наоборот:
/^(something|nothing|anything|everything)$/.exec('jesus')||alert('Who cares?');
[Обновить] Еще короче; -)
if (/^(some|no|any|every)thing$/.exec('jesus')) alert('Who cares?');
Ответ 2
Вы могли бы использовать это...
if (["something", "nothing", "anything", "everything"].includes(a)) {
alert('Who cares?');
}
Если вы застряли с поддержкой старых браузеров...
if (["something", "nothing", "anything", "everything"].indexOf(a) > -1) {
alert('Who cares?');
}
Вы также пометили его как jQuery, поэтому, если вам нужно поддерживать старые браузеры без Array.prototype.indexOf()
, вы можете использовать $.inArray()
.
Ответ 3
Вы можете поместить параметры в массив и использовать jQuery $.inArray()
или javascrpt indexOf()
для поиска массива
Чистый javascript
Live Demo
var a = 'anything';
arr = ['something', 'nothing', 'anything', 'everything'];
if(arr.indexOf(a) != -1)
alert("condition met");
else
alert("condition not met");
С jQuery
Live Demo
var a = 'jesus';
arr = ['something', 'nothing', 'anything', 'everything'];
if($.inArray(a, arr) != -1) // With jQuery
alert("condition met");
else
alert("condition not met");
Ответ 4
Попробуйте следующее:
Если вы хотите проверить слова, отличные от Jesus,
попробуйте следовать,
if(a != "jesus"){
alert('Who cares?');
}
если вы хотите проверить определенные слова,
попробуйте следовать,
var check_arrays = ['something','nothing', 'anything', 'everything'];
if(checkThis(a)){
alert('Who cares?');
}
function checkThis(a)
{
for(i=0;i<check_arrays.length;i++)
{
if(check_arrays[i] == a)
return true;
}
return false;
}
Ответ 5
С ES7 вы можете использовать Array.prototype.includes и даже более короткую запись, чем indexOf, которая уже реализована в каждом современном браузере.
Вот пример использования:
if (['hero', 'anything', 'everything'].includes(me)) {
alert('Who cares?');
}
И полифилл от Мозиллы.
Ответ 6
Может быть, использовать переключатель, а не если:
var a = 'jesus';
switch (a){
case 'something':
case 'nothing' :
case 'anything':
case 'everything':
alert('Who cares?');
break;
}
Ответ 7
Использование литерала объекта:
var all={something:1,nothing:1,anything:1,everything:1};
if (all.hasOwnProperty('jesus')) alert('Who cares?');
Я бы сказал, что это наиболее сжатое межсерверное выражение для общего использования (ну, пока целью является сравнение строк). Он также очень гибкий, поскольку вы можете легко добавлять или удалять свойства:
all.mything=1;
delete all.nothing;
Ответ 8
Я думаю, что нет простого способа сделать это. Но вы можете написать функцию in_array
, и вы можете использовать ее в любом месте
Array.prototype.in_array = function(p_val) {
for(var i = 0, l = this.length; i < l; i++) {
if(this[i] == p_val) {
return true;
}
}
return false;
}
var v_array = [ 'something','nothing', 'anything', 'everything'];
var a = "jesus";
if(v_array.in_array(a)){
alert('Who cares?');
}