次の条件を JavaScript で記述するより良い方法はありますか?
if ( value == 1 || value == 16 || value == -500 || value == 42.42 || value == 'something' ) {
// blah blah blah
}
私はこれらの論理 OR をすべてつなぎ合わせるのが嫌いです。なんらかの略語があるかどうか疑問に思っています。
ありがとう!
次の条件を JavaScript で記述するより良い方法はありますか?
if ( value == 1 || value == 16 || value == -500 || value == 42.42 || value == 'something' ) {
// blah blah blah
}
私はこれらの論理 OR をすべてつなぎ合わせるのが嫌いです。なんらかの略語があるかどうか疑問に思っています。
ありがとう!
var a = [1, 16, -500, 42.42, 'something'];
var value = 42;
if (a.indexOf(value) > -1){
// blah blah blah
}
Upd: コメントで提案されているユーティリティ関数のサンプル:
Object.prototype.in = function(){
for(var i = 0; i < arguments.length; i++){
if (this == arguments[i]) return true;
}
return false;
}
したがって、次のように書くことができます。
if (value.in(1, 16, -500, 42.42, 'something')){
// blah blah blah
}
配列オブジェクトを拡張できます。
Array.prototype.contains = function(obj) {
var i = this.length;
while (i--) {
if (this[i] == obj) {
return true;
}
}
return false;
}
次に、これらすべての値を配列に格納すると、 MyValues.contains(value) のようなことができます
いいえ、それは省略形です。
別の方法として、次のことができますswitch
switch (value) {
case 1 :
case 16 :
case -500 :
....
}
多くの可能な値が必要な場合は管理が簡単ですが、実際にはバージョンが短くなります:)
var value= -55;
switch(value){
case 1: case 16: case -55: case 42.5: case 'something':
alert(value); break;
}
まあ、あなたはswitch文を使うことができます...
switch (value) {
case 1 : // blah
break;
case 16 : // blah
break;
case -500 : // blah
break;
case 42.42: // blah
break;
case "something" : // blah
break;
}
JavaScript 1.6 以降を使用している場合は、配列で indexOf 表記を使用できます。
if ([1, 16, -500, 42.42, "something"].indexOf(value) !== -1) {
// blah
}
そして究極のハックとして、値を文字列に強制することができます (これはすべてのブラウザーで機能します)。
if ("1,16,-500,42.42,something".indexOf(value) !== -1) {
// blah
}
スイッチは許容できる選択です。問題の複雑さに応じて、マップを使用することもできます (例に記載した以上のものがあると仮定します)。
var accept = { 1: true, 16: true, '-500': true, 42.42: true, something: true };
if (accept[value]) {
// blah blah blah
}
もちろん、配列からプログラム的にacceptを生成することもできます。このパターンをどれだけ使用する予定かによって異なります。:/
それを行うためのさらに別の方法を作るために...
if (/^(1|16|-500|42.42|something)$/.test(value)) {
// blah blah blah
}
配列プロトタイプなどを拡張する必要はありません。簡単な正規表現を使用して値をテストするだけです!