0

JavaScriptでは、次のコードがあるとしましょう

var test = 'd';
if (test != 'a' && test != 'b' && test != 'c')
  alert('were good to go');

これは私にはかなり長いように思えます私は次のようなものを書きたいです

if (test != ('a' && 'b' && 'c')
  alert('were good to go');

残念ながら、これは機能しません。これを書くためのよりエレガントな方法は何ですか?

4

4 に答える 4

2

それを行うことはできませんが、次のようにかなり近づくことができます。

Array.prototype.contains = function(v) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == v) return true;
    }
    return false;
}

if (!['a', 'b', 'c'].contains('d')) {
    alert('good to go');
}

ほとんどの適切な JS ライブラリには、このようなリスト プロトタイプの多くのバリエーションが含まれているはずです。

于 2009-07-23T21:01:35.677 に答える
2
var test = 'd';
if (!/[abc]/.test(test))
  alert('were good to go');
于 2009-07-23T21:26:44.333 に答える
1

私は、これが論理的に無効な質問であるというマシュー・クラムリーに同意します。楽しみのために、私はあなたがあなたの質問で&&を使うつもりだったと仮定するつもりです...

var test = 'd';
({a: 1, b: 1, c: 1}[ test ]) || alert("we're good to go");

また..

var test = 'd';
!(test in {a: 0, b: 0, c: 0}) && alert("we're good to go");
于 2009-07-24T04:20:23.097 に答える
0

1 つの小さなヘルパー関数があなたを遠くまで連れて行ってくれます...

// If you write this...
function set(){
    obj={}
    for (var i=0; i<arguments.length; i++)
        obj[arguments[i]]=1;  
    return obj
}

// Then you can do this!
if (! test in set('a','b','c')){
    //Do stuff.
}
于 2009-07-23T21:30:18.350 に答える