web-dev-qa-db-ja.com

OR(||)などのスイッチで複数のケースをテストします

aまたはbをテストする必要がある場合、switchcaseをどのように使用しますか同じ場合?

switch (pageid) {
  case "listing-page" || "home-page":
    alert("hello");
    break;
  case "details-page":
    alert("goodbye");
    break;
}
204
Andres

フォールスルーを使用できます:

switch (pageid)
{
    case "listing-page":
    case "home-page":
        alert("hello");
        break;
    case "details-page":
        alert("goodbye");
        break;
}
475
kei

他の回答では、なぜ機能するのかを実際に説明せずにそれを行う方法を説明しているため、

switchを実行すると、最初に一致するcaseステートメントが見つかり、breakステートメントまたはswitch(またはreturnステートメントの終わり)のいずれかがヒットするまで、スイッチの後にコードの各行が実行されます。意図的にbreakを省略すると、次のcaseの下のコードも実行されます。これはfall-throughと呼ばれます。 OPの要件については:

switch (pageid) {
   case "listing-page":
   case "home-page":
      alert("hello");
      break;

   case "details-page":
      alert("goodbye");
      break;
} 

breakステートメントを含めるのを忘れることは、かなり一般的なコーディングの間違いであり、switchが期待どおりに機能しない場合は、最初に探す必要があります。そのため、一部の人々は、「フォールスルー」と言うコメントを入れて、意図的にbreakステートメントが省略された場合にそれを明確にすることを好みます。次の例ではそれをやや複雑にし、フォールスルーする前に実行するコードを一部のケースに含める方法を示しているため、これを行います。

switch (someVar) {
   case 1:
      someFunction();
      alert("It was 1");
      // fall through
   case 2:
      alert("The 2 case");
      // fall through
   case 3:
      // fall through
   case 4:
      // fall through
   case 5:
      alert("The 5 case");
      // fall through
   case 6:
      alert("The 6 case");
      break;

   case 7:
      alert("Something else");
      break;

   case 8:
      // fall through
   default:
      alert("The end");
      break;
}

また、(オプションで)defaultケースを含めることもできます。これは、他のケースがどれも一致しない場合に実行されます-defaultを含めず、ケースが一致しない場合は何も起こりません。 (オプションで)デフォルトのケースにフォールスルーできます。

したがって、2番目の例では、someVarが1の場合、someFunction()が呼び出され、複数のケースに分類される4つのアラートが表示されます。 someVarが3、4または5の場合、2つのアラートが表示されます。 someVarが7の場合、「Something else」が表示され、8またはその他の値の場合、「The end」が表示されます。

112
nnnnnn

2つのcaseラベルを作成する必要があります。

コントロールは最初のラベルから2番目のラベルにフォールスルーするため、両方が同じコードを実行します。

14
SLaks

あなたはそれを切り替える必要があります!

switch (true) {
    case ( (pageid === "listing-page") || (pageid === ("home-page") ):
        alert("hello");
        break;
    case (pageid === "details-page"):
        alert("goodbye");
        break;
}
4
Stefano Favero

switchbreakを忘れて、ifで遊ぼう。そして主張する代わりに

if(pageid === "listing-page" || pageid === "home-page")

ケース付きの複数の配列を作成し、 Array.prototype.includes() で確認できます

var caseA = ["listing-page", "home-page"];
var caseB = ["details-page", "case04", "case05"];

if(caseA.includes(pageid)) {
    alert("hello");
}
else if (caseB.includes(pageid)) {
    alert("goodbye");
}
else {
    alert("there is no else case");
}
3
khex