0

複数の有効な値を返すことができるAjaxリクエストがあるので、次のように「OR」演算子を使用して応答を分析しています。

if(json.reply == "d" || json.reply == "e" || json.reply == "i" || json.reply == "j" || json.reply == "k" )

私の実際のコードにはまだ多くの比較がありますが、これを書くためのより読みやすくエレガントな構文がJavascriptにありますか?SQLの「IN」演算子のようなもの:

if( json.reply IN ("d", "e", "i", "j", "k") )

提案をありがとう!

4

6 に答える 6

2

Switchステートメントは別の可能な方法です:

switch (varName)
{
case "mike": case "joe": case "larry": 
alert('cool');
break;

default: 
alert('also cool');
break;
}
于 2012-06-15T16:02:20.027 に答える
1

許可されたすべての回答の配列を作成し、応答がその配列にあるかどうかを確認できます。

var allowedReplies = ["d", "e", "i", "j", "k"];

if(allowedReplies.indexOf(json.reply) != -1) {
  // your other code
}

ただしindexOf、IEのすべてのバージョンにあるわけではないことに注意してください。MDNによると、IE9に表示されます。特にjQueryを使用している場合は、それがないバージョンの独自の実装を簡単に作成できます(私のプロジェクトの1つでこれと同じことを行いました)。

于 2012-06-15T15:59:10.603 に答える
1

次のように関数を再プログラムできます。

function IN()
{
    var exist=0;
    for(var i=0,il=arguments.length;i<il;i++)
        if(arguments[0]==arguments[i])
            exist=1;
    return exist;
}

次のように関数を呼び出します。IN(json.reply,"d","e","i","j","k");

ここにフィドルがあります:http://jsfiddle.net/mageek/TwCKC/3

編集:

同じ関数ですが、呼び出し方が異なります。

function IN()
{
    var exist=0;
    for(var i=0,il=arguments.length;i<il;i++)
        if(this!=arguments[i])
            exist=1;
    return exist;
}
String.prototype.IN=IN;
Number.prototype.IN=IN;
Object.prototype.IN=IN;

それからあなたはそれをこのように呼びます:json.reply.IN("d","e","i","j","k");

そしてフィドル: http: //jsfiddle.net/mageek/TwCKC/2

于 2012-06-15T16:05:46.200 に答える
1
    if(json.reply in {d:1,e:1,i:1,j:1,k:1}){

or

    if({d:1,e:1,i:1,j:1,k:1}[json.reply]){
于 2012-06-15T16:05:53.410 に答える
0

を使用しindexOfます。見つかった文字のインデックスを返します。見つからなかった場合は-1を返します。

["d", "e", "i", "j", "k"].indexOf("i")
> 2
["d", "e", "i", "j", "k"].indexOf("a")
> -1
于 2012-06-15T15:57:36.803 に答える
0

indexOf正規表現を使用できない可能性を回避するには、次のようにします。

var allowed = ["a","b","c","d"];
if (RegExp("^("+allowed.join("|")+")$").test(json.reply)){
    console.log('allowed');
    }

許可された返信に正規表現の数量詞などが含まれている可能性がある場合は、最初にそれらをエスケープする必要があります。

于 2012-06-15T16:05:26.240 に答える