2012-09-07 40 views
0

我發現這個職位:Switch case with three parameters?和我使用開關的情況下傳遞多個參數,這樣的考慮:開關盒與條件?

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

似乎有是一些問題,這是否是這樣做的最有效的方式。情緒似乎是如果條件更合適。但是,當我看着我寫的條件時,我不確定?例如這種感覺凌亂(請注意,我已經去除了大約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

[搭建jsPerf測試用例(http://jsperf.com/if-statement-with-many-ors),並找出自己。它可能取決於運行它的瀏覽器。 – Blazemonger

+0

我從來沒有使用過這個工具。感謝您指點我! –

+0

我不明白這是如何工作的?你不能只比較兩個數組http://jsfiddle.net/acXV4/1/ – CaffGeek

回答

5

我覺得如果你有這些條件很多我喜歡使用switch語句使你的代碼更清潔和更容易理解.. 可以省略break對落在該特定類別的條件......

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; 
}