2012-09-07 5 views
0

는이 게시물을 발견 : Switch case with three parameters?와 나는이 같은 여러 매개 변수를 전달하는 스위치 케이스 사용을 고려했다 :스위치 케이스 대 조건부?

switch (array($var1, $var2, $var3)) { 
case array(true, false, false): 
    echo "hello"; 
    break; 
} 

이이 일을 가장 효율적인 방법입니다 여부에 의문이있는 것 같습니다. 분위기는 if 조건이 더 적절하다고 생각됩니다. 하지만 내가 쓰고있는 조건부를 보면 확실하지 않습니까? 예를 들어이 지저분 (내가 당신을 지루에서 유지하기 위해 약 6 다른 조건문을 제거했다고 주) 느낌 :

if ( 
    csz == "google" || 
    csz == "bing" || 
    csz == "yahoo" || 
    csz == "dogpile" || 
    csz == "millionshort" && 
    cs == '') { 
    $("li.phone").replaceWith('<li class="phone">' + phoneNaturalSearch + '</li>'); 
} 
else if ( 
    csz == "facebook" && 
    cs == '') { 
    $("li.phone").replaceWith('<li class="phone">' + phoneFacebook + '</li>'); 
} 
else if ( 
    csz == "google-plus" || 
    csz == "plus") { 
    $("li.phone").replaceWith('<li class="phone">' + phoneGooglePlus + '</li>'); 
} 
// Snipped out other conditionals 
else { 
    $("li.phone").replaceWith('<li class="phone">' + phoneDefault + '</li>'); 
} 

여기에 더 효율적 여러 매개 변수로 전환 할 것인가를, 아니면 성능 저하가 발생할 것인가? 나는 코드를 작성해야하고 실제로 덜 지저분한지를 확인해야한다고 생각하지만, 먼저 전문가의 의견을 튀게 할 것이라고 생각했습니다.

+1

[A jsPerf 테스트 케이스를 구축 (http://jsperf.com/if-statement-with-many-ors)과 자신을 찾을 수 있습니다. 브라우저를 실행하는 브라우저에 따라 다를 수 있습니다. – Blazemonger

+0

나는이 도구를 사용한 적이 없다. 나를 가리켜 주셔서 감사합니다! –

+0

어떻게 작동합니까? 당신은 단지 두 개의 배열을 비교할 수 없습니다. http://jsfiddle.net/acXV4/1/ – CaffGeek

답변

5

나는

... 당신이 많은 조건을 가지고 있다면 당신은 휴식의이 특정 범주에 대한 속하는 조건을 생략 할 수 있습니다 .. 이해하는 코드 청소기를 만들어 쉽게 스위치 문을 사용하는 것을 선호 느낌
var phoneType= ''; 

switch(csz){ 
    case "google" : 
    case "bing" : 
    case "yahoo" : 
    case "dogpile" : 
    case "millionshort" : 
    if (cs==''){ 
     phoneType = phoneNaturalSearch ; 
     break; 
    } 
    else { 
     goto case "facebook"; 
    } 
    case "facebook" : 
    if (cs==''){ 
     phoneType = phoneFacebook ; 
     break; 
    } 
    else { 
     goto case "google-plus"; 
    } 
    case "google-plus" : 
    case "plus" : 
    phoneType = phoneGooglePlus ; 
    break; 
    default : 
    phoneType = phoneDefault ; 
    break; 
} 

$("li.phone").replaceWith('<li class="phone">' + phoneType + '</li>'); 
+0

나는 그 모습을 좋아한다! 그것은 훨씬 더 깔끔하고 내가 염두에두고있는 것입니다. 나는 그것을 소용돌이 치게 할 것이다 - 고마워! –

0

깔끔한 솔루션에 대해 말하면, 2 차원 배열로 유지하고 요소 인덱스를 검색하는 다른 방법이 있습니다.

확인이 아웃 :

var csz= 'amazon'; 

var groups = [['google','yahoo','bing'],['facebook','orkut','hi5','zurker'],['amazon','bestbuy','sears']]; 
var groupIndex = getIndexOf(groups,csz); 
if(groupIndex ==1){ 
    //code here 
    alert("1"); 
}else if(groupIndex ==2){ 
    //code here 
    alert("2"); 
}else if(groupIndex ==3){ 
    //code here 
    alert("3"); 
} 

function getIndexOf(myArray,element){ 
    for(var i=0;i<groups.length;i++){ 
     for(var j=0;j<groups[i].length;j++){ 
      if(myArray[i][j]==element){ 
       return i; 
      } 
     } 
    }   
    return -1; 
}