0

我有一个可以返回多个有效值的 Ajax 请求,所以我使用“OR”运算符来分析响应,如下所示:

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

我的真实代码还有更多的比较,那么在 Javascript 中是否有更易读和更优雅的 sintaxe 来编写这个?类似于 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(我为我的一个项目做了同样的事情)。

于 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 回答