Легче ли написать оператор if с более чем 10 условиями? - PullRequest
1 голос
/ 26 августа 2011

Вот мой код:

if (state == 'AZ' || state == 'CO' || state == 'DC' || state == 'IA' || state == 'LA' || state == 'MN' || state == 'NC' || state == 'ND' || state == 'NM' || state == 'NV' || state == 'OR' || state == 'SC' || state == 'TN' || state == 'VA' || state == 'WA' || state == 'WI' || state == 'WY') {}

Есть ли более простой способ написать это с помощью массива?Это работает, но я хочу, чтобы оно было чище!

Ответы [ 8 ]

4 голосов
/ 26 августа 2011

Вы можете использовать объект:

if ({AZ:1,CO:1,DC:1,IA:1,LA:1,MN:1,NC:1,ND:1,NM:1,NV:1,OR:1,SC:1,TN:1,VA:1,WA:1,WI:1,WY:1}[state] == 1) {

Edit:

Вы также можете найти строку в строке:

if ("AZ,CO,DC,IA,LA,MN,NC,ND,NM,NV,OR,SC,TN,VA,WA,WI,WY".indexOf(state) != -1) {

(Это, конечно, предполагает, что переменная содержит что-то разумное, значение типа "," даст ложный положительный результат.)

Это происходит даже быстрее, чем простые сравнения в большинстве браузеров: http://jsperf.com/test-regexp-vs-obj/3

3 голосов
/ 26 августа 2011

Регулярное выражение:

if(state.match(/^(AZ|CO|DC|IA|LA|MN|NC|ND|NM|NV|OR|SC|TN|VA|WA|WI|WY)$/)){
    //do whatever
}
2 голосов
/ 26 августа 2011

Если вы используете jQuery:

var states = ['AZ' ,'CO' ,'DC' ,'IA' ,'LA' ,'MN' ,'NC' ,'ND' ,'NM' ,'NV' ,'OR' ,'SC' ,'TN' ,'VA' ,'WA' ,'WI' ,'WY'];
if($.inArray('AZ',states)>=0){
    console.log('Hurrah');
}

Если нет, вам понадобится ваша собственная функция, такая как верхний ответ на этот вопрос .

2 голосов
/ 26 августа 2011

Вставьте все свои возможности в массив и используйте indexOf, чтобы проверить, содержится ли в.

Пример:

if(['NA', 'NB', 'NC'].indexOf(state) > -1)
{
    // true
}

Или добавить содержит и использовать его:

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

if(['NA', 'NB', 'NC'].contains(state))
{
    // true
}
1 голос
/ 26 августа 2011

Hava при взгляде на эту версию JavaScript функции содержит.Просто заполните массив вашими кодами состояния и проверьте, используя функцию

http://css -tricks.com / snippets / javascript / javascript-array-contains /

1 голос
/ 26 августа 2011
if ( ['AZ', 'CO', 'DC', 'And so on'].indexOf(state) != -1 ) {
    // do something
}

ПРИМЕЧАНИЕ: indexOf не поддерживается в IE <9. Если вам необходимо поддерживать эти браузеры, вы можете использовать jQuery: </p>

if ( $.inArray(state, 'AZ', 'CO', 'DC', 'And so on') != -1 ) {
    // do something
}

или вручную расширить массив прототипом .

0 голосов
/ 26 августа 2011

Если вы используете CoffeeScript , который генерирует вывод JavaScript, вы можете просто написать

if state in ['AZ', 'CO', 'DC', 'IA', 'LA', 'MN', 'NC', 'ND', 'NM', 'NV', 'OR', 'SC', 'TN', 'VA', 'WA', 'WI', 'WY']
    ...
0 голосов
/ 26 августа 2011
var states=new Array("AZ", "CO", ...);
for (s in states) {
  if (state == s) {
    // do something
    break;
  }
}

- это один из способов приблизиться к нему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...