2012-06-20 7 views
6

Czy jest skrótem dla następnego -skrótem dla wielokrotności lub wyrażenia w if

if(tld == "com" || tld == "net" || tld == "co" || tld == "org" || tld == "info" || tld == "biz") 
{ 
    //do something; 
} 
+2

@Hamish Mówi JavaScript, Poprawiłem odpowiednio tagi. – purtip31

+2

Spójrz na http://stackoverflow.com/a/10479102/298479 - wyjaśniłem kilka metod, aby zrobić to, co chcesz, a także związane z porównywaniem wydajności w przypadku, który ma dla ciebie znaczenie. – ThiefMaster

+0

@ purtip31 - Thanx. – ShalomSam

Odpowiedz

17

można użyć tablicę

if(["","com","net","co","org","info","biz"].indexOf(tld) > -1) { 
    // do something 
} 

lub jeśli używasz jQuery:

$.inArray(tld, ["com","net","co","org","info","biz"]) 

REF - Performance of OR operation (||) vs inArray()

+4

Zapomniałeś '! = -1' jako' 0' byłby całkowicie poprawnym wynikiem ('com'). – ThiefMaster

+0

Ostrożnie z pierwszym kodem IF, jako pustym ciągiem znaków - "[" "," - również zwraca wartość * false *, * undefined * i * null *. Dlatego, jeśli ** tld ** był jednym z nich, on pierwszy, mimo wszystko, przejdzie dalej! Lepiej użyj 'if ([" com "," net "," co "," org "," info "," biz "]. IndexOf (tld)> -1)' –

12

użyć regexp:

if (/^(com|net|co|org|info|biz)$/i.test(tld)) { 
    // do something 
} 
+1

jak to rozwiąże, jeśli tld to "cot", który zawiera "co"? OK, dodałeś początek i koniec, kiedy pisałem. – hackartist

+0

nie jest wolniejsze w wyrażaniu regexp pod względem wydajności? – ShalomSam

+0

@ShalomSam Nie wiem, to nie jest mikrooptymalizacja, którą przetestowałem jeszcze. –

0

myślałeś o użyciu instrukcji switch? coś takiego:

switch(tld) 
{ 
    case 'com': 
    case 'net': 
    case 'co': 
    ... 
    ... 
    // do something for all of them 
    break; 
    default: 
    // if you want you can have default process here 
    break; 
} 
+0

Myślałem o tym .. ale najlepiej byłoby użyć przełącznika, gdy masz różne wykonania w różnych przypadkach. I jeszcze bardziej szukam stenogramu, nie przedłużając mojego kodu. Dzięki za odpowiedź, choć bardzo doceniane! – ShalomSam

Powiązane problemy