4

タイトルが一般的すぎたり誤解を招いたりしないことを願っています。

var blah;
if(a > 10) blah = 'large';
if(a <= 10 && a > 5) blah = 'medium';
if(a <= 5 && a >= 0) blah = 'small';

範囲チェックを実装するためのよりエレガントで簡潔な方法はありませんか?

4

4 に答える 4

4

はい、else句を使用します。

var blah;
if(a > 10){
    blah = 'large';
}else if(a > 5){
    blah = 'medium';
}else if(a >= 0){
    blah = 'small';
}

各ステートメントで単純な割り当てを行っているため、三項式を使用することもエレガントな場合がありますが、これは読みにくいと多くの人が主張します。

var blah =
  a > 10 ? 'large'  :
  a > 5  ? 'medium' :
  a >= 0 ? 'small'  :
  undefined; // May want to choose a better default value for a < 0
于 2013-07-10T23:32:32.540 に答える
3

使用できますternary operators

var blah;

blah = a > 10 ? 'large' : (a > 5 ? 'medium' : 'small' ) ;
于 2013-07-10T23:35:10.053 に答える
1

範囲間隔が多い場合は、次のようなものを使用できます。

var ranges = [[10, 'large'],
              [5, 'medium'],
              [0, 'small']];

function range(n) { 
    for (var i = 0; i < ranges.length; i++) { 
        if (n > ranges[i][0]) {
            return ranges[i][1]; 
        }
    }
    return 'default value';
}

<使用するかどうかをケースごとに指定できないため、これはそれほど柔軟ではありませんが<=、範囲がたくさんある場合は、このようなものを書くかもしれません。他の答えは素晴らしいです。これをアイデアとして追加すると思いました。

于 2013-07-10T23:54:35.127 に答える
0

範囲が一定の場合は、switch ステートメントと modulo を組み合わせて使用​​できます。例えば。

var blah;
switch(a-(a % 5)) {
    case 10:
        blah = 'large';
        break;
    case 5:
        blah = 'medium';
        break;
    case 0:
        blah = 'small';
        break;
    default:
        blah = 'large';
}

もちろん、各範囲の差が等しい場合にのみ使用できます。

于 2013-07-11T00:25:41.950 に答える