2016-10-26 12 views
0

私は、10から990の範囲の値を持つ一連のテストスコアを持っています。それぞれのスコアを特定の範囲に配置したいと思います。ここで範囲外の値を処理するにはどうすればよいですか?スイッチかif文?

は、私が使用したスクリプトです:

function between(x, min, max) { 
    return (x >= min && x <= max); 
} 

var overallScore = 960; 

if(between(overallScore, 905, 990)) { 
    var output = "905 - 990"; 
} 
if(between(overallScore, 785, 900)) { 
    var output = "785 - 900"; 
} 
if(between(overallScore, 605, 780)) { 
    var output = "605 - 780"; 
} 
if(between(overallScore, 405, 600)) { 
    var output = "405 - 600"; 
} 
if(between(overallScore, 255, 400)) { 
    var output = "255 - 400"; 
} 
if(between(overallScore, 10, 250)) { 
    var output = "10 - 250"; 
} 

alert(output); 

これはOK働き、overallScore値が990までの範囲10内にある、この外の値が「10から250」として範囲を返して。これに対処する最善の方法は何でしょうか?私はswitch文を使用することを考えましたが、これがどのように行われるのか見苦しくなっています。コメントや助けを大歓迎します。

+0

スコアは901、902、903、または904とすることができないのですか?または781,782,783、または784?等。? –

+0

if、else ifの場合は – Mahi

+0

@RoyS:「発生しない」または「範囲外の出力に同じ<10」を指定したい場合は除外しますか? –

答えて

1

をあなたの範囲を含んでいて、それらに対してチェックする簡単な関数を作ります。そうすれば、維持するのがずっと簡単になり、理解が簡単になります。

var ranges = [ 
    { min: 10, max: 250}, 
    { min: 255, max: 400}, 
    { min: 405, max: 600}, 
    { min: 605, max: 780}, 
    { min: 785, max: 900}, 
    { min: 905, max: 990} 
]; 

function getScoreRange(score){ 
    var output = 'out of range'; //set to either empty or null or default value for out of range scores. 
    ranges.forEach(function(range){ 
    if(score >= range.min && score <= range.max){ 
     output = range.min + ' - ' + range.max; 
    } 
    }); 
    return output; 
}; 
alert(getScoreRange(960)); 

は今、あなたは簡単にあなたのロジックを変更し、新しい範囲を追加したり、あまり変更することなく、それらを変更することができ、あなたはまた、他の範囲とし、他の目的のためだけでなく、あなたのスコアリング方法を再利用することができます。

ワーキングJSFiddle:https://jsfiddle.net/workingClassHacker/c06pq2w0/3/

+0

ありがとうございます。この方法でオブジェクトを使用するとは思っていませんでした。とても有難い :) – RoyS

0
あなたは単に var outputを宣言することによって行うことができます

function between(x, min, max) { 
 
    return (x >= min && x <= max); 
 
} 
 
var overallScore = 6000; 
 
var output = "" 
 
if (between(overallScore, 905, 990)) { 
 
    output = "905 - 990"; 
 
} 
 
if (between(overallScore, 785, 900)) { 
 
    output = "785 - 900"; 
 
} 
 
if (between(overallScore, 605, 780)) { 
 
    output = "605 - 780"; 
 
} 
 
if (between(overallScore, 405, 600)) { 
 
    output = "405 - 600"; 
 
} 
 
if (between(overallScore, 255, 400)) { 
 
    output = "255 - 400"; 
 
} 
 
if (between(overallScore, 10, 250)) { 
 
    output = "10 - 250"; 
 
} 
 
console.log(output);
if-blocks

あなたvarは、メソッドの実行を開始する前に、変数の巻き上げが発生したときに実行なっていた最後。

+0

質問を読んだことがありますか? – Mahi

+0

@Mahiはい、OPの質問は 'これ以外の値は" 10-250 "という範囲を返します。なぜそれが起こっているのか説明しました。 – gurvinder372

+0

彼はそれが結果を得るために彼らの他の解決策です。 – Mahi

0

あなたは901,782などの値は起こり得ないと言ってきました。 between関数の

function check(overallScore) { 
 
    var output; 
 
    if (overallScore > 990) { 
 
    output = "too high"; //...whatever you want for too high... 
 
    } else if (overallScore > 900) { 
 
    output = "905 - 990"; 
 
    } else if (overallScore > 780) { 
 
    output = "785 - 900"; 
 
    } else if (overallScore > 600) { 
 
    output = "605 - 780"; 
 
    } else if (overallScore > 400) { 
 
    output = "405 - 600"; 
 
    } else if (overallScore > 250) { 
 
    output = "255 - 400"; 
 
    } else if (overallScore > 9) { 
 
    output = "10 - 250"; 
 
    } else { 
 
    output = "too low"; //...whatever you want for too low... 
 
    } 
 
    console.log(overallScore + ": " + output); 
 
} 
 
check(1000); 
 
check(5); 
 
check(200);

必要がありません:それは、私たちは最後に、最終的なelseif/else ifを使用することで通常のものを、それらを無視して行うことができることを意味します。

範囲は本当に、あなたはまだif/else ifを使用しますが(おそらくあなたのbetween機能付)下限を追加、ギャップを持っている場合:私は実際にオブジェクトを使用します

function between(x, min, max) { 
 
    return (x >= min && x <= max); 
 
} 
 

 
function check(overallScore) { 
 
    var output; 
 
    if (overallScore > 990) { 
 
    output = "too high"; //...whatever you want for too high 
 
    } else if (between(overallScore, 905, 990)) { 
 
    output = "905 - 990"; 
 
    } else if (between(overallScore, 785, 900)) { 
 
    output = "785 - 900"; 
 
    } else if (between(overallScore, 605, 780)) { 
 
    output = "605 - 780"; 
 
    } else if (between(overallScore, 405, 600)) { 
 
    output = "405 - 600"; 
 
    } else if (between(overallScore, 255, 400)) { 
 
    output = "255 - 400"; 
 
    } else if (between(overallScore, 10, 250)) { 
 
    output = "10 - 250"; 
 
    } else { 
 
    output = "too low"; //...whatever you want for too low 
 
    } 
 
    console.log(overallScore + ": " + output); 
 
} 
 
check(1000); 
 
check(5); 
 
check(200);

関連する問題