8

次の条件を JavaScript で記述するより良い方法はありますか?

if ( value == 1 || value == 16 || value == -500 || value == 42.42 || value == 'something' ) {
  // blah blah blah
}

私はこれらの論理 OR をすべてつなぎ合わせるのが嫌いです。なんらかの略語があるかどうか疑問に思っています。

ありがとう!

4

7 に答える 7

5
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
}
于 2010-05-28T20:14:46.820 に答える
4

配列オブジェクトを拡張できます。

Array.prototype.contains = function(obj) {
  var i = this.length;
  while (i--) {
    if (this[i] == obj) {
      return true;
    }
  }
  return false;
}

次に、これらすべての値を配列に格納すると、 MyValues.contains(value) のようなことができます

于 2010-05-28T20:17:30.063 に答える
2

いいえ、それは省略形です。

別の方法として、次のことができますswitch

switch (value) {
case 1 :
case 16 :
case -500 :
    ....
}

多くの可能な値が必要な場合は管理が簡単ですが、実際にはバージョンが短くなります:)

于 2010-05-28T20:14:44.090 に答える
1
var value= -55;
switch(value){
    case 1: case 16: case -55: case 42.5: case 'something': 
        alert(value); break;        

}
于 2010-05-28T20:27:30.833 に答える
0

まあ、あなたは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
}
于 2010-05-28T20:24:02.653 に答える
0

スイッチは許容できる選択です。問題の複雑さに応じて、マップを使用することもできます (例に記載した以上のものがあると仮定します)。

var accept = { 1: true, 16: true, '-500': true, 42.42: true, something: true };
if (accept[value]) {
  // blah blah blah
}

もちろん、配列からプログラム的にacceptを生成することもできます。このパターンをどれだけ使用する予定かによって異なります。:/

于 2010-05-28T20:18:39.343 に答える
-1

それを行うためのさらに別の方法を作るために...

if (/^(1|16|-500|42.42|something)$/.test(value)) {
  // blah blah blah
}

配列プロトタイプなどを拡張する必要はありません。簡単な正規表現を使用して値をテストするだけです!

于 2010-09-09T20:29:18.060 に答える