1. ホーム
  2. javascript

[解決済み] 値のリストに対する変数の等質性をチェックする

2022-04-22 02:59:45

質問

ある変数をチェックしています。 foo が、いくつかの値と等しいかどうかを調べます。例えば

if( foo == 1 || foo == 3 || foo == 12 ) {
    // ...
}

ポイントは、このような些細なタスクのために、むしろ多くのコードであるということです。私は次のように思いつきました。

if( foo in {1: 1, 3: 1, 12: 1} ) {
    // ...
}

というのも、オブジェクトの中の項目に冗長な値を与えなければならないからです。

どなたか、複数の値に対して等値チェックを行うまともな方法をご存じないでしょうか?

どのように解決するのですか?

提供された回答を使って、結局、以下のようになりました。

Object.prototype.in = function() {
    for(var i=0; i<arguments.length; i++)
       if(arguments[i] == this) return true;
    return false;
}

のように呼び出すことができます。

if(foo.in(1, 3, 12)) {
    // ...
}


編集する 私は最近、値が文字列で特殊文字を含まない場合に有効なこの「トリック」に出会いました。特殊文字の場合は、エスケープするために醜くなり、また、そのためにエラーが発生しやすくなります。

/foo|bar|something/.test(str);

より正確には、これは正確な文字列をチェックしますが、単純な等値性テストとしてはより複雑です。

/^(foo|bar|something)$/.test(str);