стенография для объединения в цепочку логических операторов в JavaScript?

Существует ли лучший способ записать следующее условное выражение в JavaScript?

if ( value == 1 || value == 16 || value == -500 || value == 42.42 || value == 'something' ) {
  // blah blah blah
}

Я очень не хочу иметь все те логические ORs, представленные в виде строки вместе. Я задаюсь вопросом, существует ли некоторая стенография.

Спасибо!

8
задан JohnFx 28 May 2010 в 20:23
поделиться

6 ответов

var a = [1, 16, -500, 42.42, 'something'];
var value = 42;
if (a.indexOf(value) > -1){
// blah blah blah
}

Upd: Пример утилитной функции, предложенный в комментариях:

Object.prototype.in = function(){
  for(var i = 0; i < arguments.length; i++){
    if (this == arguments[i]) return true;
  }
  return false;
}

Так вы можете написать:

if (value.in(1, 16, -500, 42.42, 'something')){
// blah blah blah
}
5
ответ дан 5 December 2019 в 14:00
поделиться

Вы можете расширить объект массива:

Array.prototype.contains = function(obj) {
  var i = this.length;
  while (i--) {
    if (this[i] == obj) {
      return true;
    }
  }
  return false;
}

Затем, если вы сохраните все эти значения в массиве, вы можете сделать что-то вроде MyValues.contains (value)

4
ответ дан 5 December 2019 в 14:00
поделиться

переключатель - приемлемый выбор. Вы также можете использовать карту, в зависимости от сложности проблемы (предполагая, что у вас их больше, чем вы указали в своем примере).

var accept = { 1: true, 16: true, '-500': true, 42.42: true, something: true };
if (accept[value]) {
  // blah blah blah
}

accept может быть сгенерирован программно из массива, конечно. Зависит от того, как часто вы планируете использовать этот шаблон. :/

0
ответ дан 5 December 2019 в 14:00
поделиться

Ну, вы можете использовать оператор switch...

switch (value) {
  case 1    : // blah
              break;
  case 16   : // blah
              break;
  case -500 : // blah
              break;
  case 42.42: // blah
              break;
  case "something" : // blah
                     break;
}

Если вы используете JavaScript 1.6 или выше, вы можете использовать нотацию indexOf для массива:

if ([1, 16, -500, 42.42, "something"].indexOf(value) !== -1) {
   // blah
}

А для высшего уровня хакерства вы можете перевести значения в строки (это работает для всех браузеров):

if ("1,16,-500,42.42,something".indexOf(value) !== -1) {
   // blah
}
0
ответ дан 5 December 2019 в 14:00
поделиться

нет, это сокращение.

как альтернатива, вы можете сделать switch

switch (value) {
case 1 :
case 16 :
case -500 :
    ....
}

что проще в управлении, если вам нужно много возможных значений, но на самом деле ваша версия все равно короче :)

2
ответ дан 5 December 2019 в 14:00
поделиться
var value= -55;
switch(value){
    case 1: case 16: case -55: case 42.5: case 'something': 
        alert(value); break;        

}
1
ответ дан 5 December 2019 в 14:00
поделиться
Другие вопросы по тегам:

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