4

switch ケースで変数を使用したい。例として、それを行うことができませんでした。手伝ってくれますか?

switch(basket,pay){
   case true, true:
       blah blah...
   break;
   case false,true:
       blah blah..
   break;
   case false, false:
      blah blah...
   break;
}
4

5 に答える 5

10

探しているのはflags と bitmasksです。基本的に、myltiple 疑似ブール値を同じ変数に格納し、それらの複合条件にアクセスできます。これの優れた点は、複数のプロパティを 1 つの変数に結合できることです。これは、追跡する必要があるより多くのブール値のプロパティがある場合に特に便利です。

var FLAG_BASKET = 0x1; // 0001  
var FLAG_PAY = 0x2; // 0010

//set them both to pseudo-true
var flags = FLAG_BASKET | FLAG_PAY;

switch (flags){
  case 0x0://both are false
  case 0x1://basket is true, pay is false
  case 0x2://basket is false, pay is true
  case 0x3://both are true
}

いじられた

于 2012-06-28T01:35:58.623 に答える
2

あなたが書いたものは合法的なJavaScriptですが、それはあなたが期待することをしません。

式では、コンマは最後のメンバーに評価されます。これは通常、forループで2つの変数を同時に初期化するために使用されます。

for(var i = 0, l = myArray.length; i < l; ++i) {
    ...
}

switchステートメントとcaseステートメントでコンマ演算子を使用すると、最初の値が破棄され、最後の値が使用されます。例については、このフィドルを参照してください:http: //jsfiddle.net/UG4vf/

両方の値を比較して、両方に一致するケースを見つけることではありません。言い換えれば、上記のコードは次のようになります。

switch(pay){
   case true:
       blah blah...
   break;
   case true:
       blah blah..
   break;
   case false:
      blah blah...
   break;
}
于 2012-06-28T00:19:26.167 に答える
2

正直なところ、あなたの switch ステートメントは必要ないようです。ifいくつかの単純な'sで問題ないはずです。

if (basket && pay) {
  // code
} else if (pay) {
  // code
} else {
  // code
}
于 2012-06-28T00:34:47.073 に答える
0

このソリューションを使用すると、スイッチに複数の引数を指定できます。

const a = "foo";
const b = true;
const c = null;

const condition = JSON.stringify({ a, b, c });

function mySwitch(condition) {
  switch (condition) {
    case JSON.stringify({
      a: "foo",
      b: true,
      c: true
    }):
      return 'case { a: "foo", b: true, c: null }';

    case JSON.stringify({
      a: "foo",
      b: true,
      c: null
    }):
      return 'case { a: "foo", b: true, c: null }';

    default:
      return 'default';
  }
}

console.log("condition:", condition);
console.log("result:", mySwitch(condition));

条件としてのオブジェクトに加えて、これは配列でも機能しますが、このソリューションを使用することの欠点は、完全なスイッチ条件値をスイッチ ケース条件に渡す必要があることです。たとえば、スイッチのケースがプロパティaを考慮bし、例からではなくc、このソリューションは機能しません。cただし、ケースに対して常に特定の値があることが確実にわかっている場合は、このソリューションを使用できます。

OP のサンプル コードには、ケースごとに反復的な量の引数が含まれているため、このソリューションは、スイッチに複数の引数を指定する可能性をハッキングするのに役立ちます。

于 2019-11-13T15:55:35.270 に答える