1

Java スクリプトの「switch」ステートメントの「case」ステートメントに問題があります。私の質問は、「ケース」ステートメントに複数の数字を書き、各数字に対して複数のコマンドを書く作業をすべて保存する方法です。自分自身をよりよく説明しようとします。case 文に 10-14 (10,11,12,13,14) の数字を書きたいと思います。どのように書くことができますか?助けてくれてありがとう、そして私の下手な英語でごめんなさい。

name = prompt("What's your name?")  
switch (name)  
{  
    case "Ori":  
        document.write("<h1>" + "Hello there Ori" + "<br>")  
        break;  

    case "Daniel":  
        document.write("<h1>" + "Hi, Daniel." + "<br>")  
        break;  

    case "Noa":  
        document.write("<h1>" + "Noa!" + "<br>")  
        break;  

    case "Tal":  
        document.write("<h1>" + "Hey, Tal!" + "<br>")  
        break;  

    default:  
        document.write("<h1>" + name + "<br>")  
}  
age = prompt ("What's your age?")
switch (age)
{
case  "10":
document.write("you are too little" + name)
break;

case "14":
document.write("So , you are in junior high school" + name)
break;

case  "18":
document.write("You are a grown man" + name)
break;

default:
document.write("That's cool" + name)
break;
}
4

5 に答える 5

2

この回答を確認してくださいJavaScriptで整数の範囲をオンにします

要約すると、これを行うことができます

var x = this.dealer;
switch (true) {
    case (x < 5):
        alert("less than five");
        break;
    case (x > 4 && x < 9):
        alert("between 5 and 8");
        break;
    case (x > 8 && x < 12):
        alert("between 9 and 11");
        break;
    default:
        alert("none");
        break;
}

しかし、if-else ステートメントをチェーンするだけで済むため、switch ステートメントの目的に反します。または、これを行うことができます:

switch(this.dealer) {
        case 1:
        case 2:
        case 3:
        case 4:
            // Do something.
            break;
        case 5:
        case 6:
        case 7:
        case 8:
            // Do something.
            break;
        default:
            break;
    }
于 2013-09-19T17:03:33.463 に答える
0

10 ~ 14 の数字 (10,11,12,13,14) をオンにしたいとします。これらのケースを連鎖させることができます。

switch(number) {
  case 10: 
  case 11: 
  case 12:
  case 13:
  case 14:
    alert("I'm between 10 and 14");
    break;
  default:
    alert("I'm not between 10 and 14");
    break;
}
于 2013-09-19T17:03:00.147 に答える
0

break;ステートメントを単に省略できます。

switch (2) {
    case 1: case 2: case 3:
        console.log('1 or 2 or 3');
        break;
    default:
        console.log('others');
        break;
}

このコンセプトを少し試してみたかったのですが、このアプローチはお勧めしませんが、制御フロー関数を作成する関数に頼ることもできます。これは単にシンタックスシュガーを許可するだけです。

var createCaseFlow = (function () {
    var rangeRx = /^(\d)-(\d)$/;

    function buildCases(item) {
        var match = item.match(rangeRx),
            n1, n2, cases;

        if (match) {
            n1 = parseInt(match[1], 10);
            n2 = parseInt(match[2], 10);
            cases = [];

            for (; n1 <= n2; n1++) {
                cases.push("case '" + n1 + "':");
            }

            return cases.join('');
        }

        return "case '" + item + "':";
    }

    return function (cases, defaultFn) {
        var fnStrings = ['switch (value.toString()) { '],
            k;

        for (k in cases) {
            if (cases.hasOwnProperty(k)) {
                fnStrings.push(k.split(',').map(buildCases).join('') + "return this[0]['" + k + "'](); break;");
            }
        }

        defaultFn && fnStrings.push('default: return this[1](); break;');

        return new Function('value', fnStrings.join('') + '}').bind(arguments);
    };

})();

var executeFlow = createCaseFlow({
        '2-9': function () {
            return '2 to 9';
        },
        '10,21,24': function () {
            return '10,21,24';
        }
    },
    function () {
        return 'default case';
    }
);

console.log(executeFlow(5)); //2 to 9
console.log(executeFlow(10)); //10,21,24
console.log(executeFlow(13)); //default case
于 2013-09-19T17:03:30.377 に答える
-1

これを機能させる方法について、すでにいくつかの回答を得ています。ただし、さらにいくつかのことを指摘したいと思います。まず、個人的には、似たようなケースが非常に多いため、これには switch/case ステートメントを使用しません。ここでは、従来の if/elseif/else チェーンの方が適していると感じます。

ユースケースによっては、関数を抽出してからスイッチ/ケースを使用することもできます (もちろん、より意味のある名前と値を使用して)。

function getCategory (number) {
    if(number > 20) {
        return 3;
    }
    if(number > 15) {
        return 2;
    }
    if(number > 8) {
        return 1;
    }

    return 0;
} 

switch( getCategory( someNumber ) ) {
    case 0:
        // someNumber is less than or equal to 8
        break;
    case 1:
        // someNumber is any of 9, 10, 11, 12, 13, 14, 15
        break;
    // ...
}

間隔が等間隔である場合は、次のようなこともできます。

switch( Math.floor( someNumber / 5 ) ) {
    case 0:
        // someNumber is any one of 0, 1, 2, 3, 4
        break;
    case 1:
        // someNumber is any one of 5, 6, 7, 8, 9
        break;
    // ...
}

break;また、一部の人々はフォールスルー (= come cases のステートメントを除外する) を含む switch/case ステートメントを悪い習慣だと考えていますが、まったく問題ないと考える人もいることに注意してください。

于 2013-09-19T17:11:28.373 に答える