0

私はこの投稿を見つけました:3つのパラメーターを持つスイッチケース?そして私はこのような複数のパラメータを渡すswitchcaseの使用を検討していました:

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

ここでは、複数のパラメーターを使用した切り替えの方が効率的ですか、それともパフォーマンスが低下しますか?コードを書いて、実際にそれほど面倒ではないかどうかを確認する必要があると思いますが、最初にそれを教祖から跳ね返そうと思いました。

4

2 に答える 2

5

これらの多くの条件がある場合は、コードをよりクリーンで理解しやすいようにするswitchステートメントを使用することをお勧めします。この特定のカテゴリに該当する条件のブレークは省略できます...

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>');
于 2012-09-07T16:17:32.007 に答える
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;
}
于 2012-09-07T18:50:34.830 に答える