“模拟”的最佳解决方案是什么;在;Javascript中的运算符以简化冗余逻辑运算符

“模拟”的最佳解决方案是什么;在;Javascript中的运算符以简化冗余逻辑运算符,javascript,Javascript,我有一个可以返回多个有效值的Ajax请求,因此我使用“OR”操作符分析响应,如下所示: if(json.reply == "d" || json.reply == "e" || json.reply == "i" || json.reply == "j" || json.reply == "k" ) function IN() { var exist=0; for(var i=0,il=arguments.length;i<il;i++) if(argum

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

if(json.reply == "d" || json.reply == "e" || json.reply == "i" || json.reply == "j" || json.reply == "k" )
function IN()
{
    var exist=0;
    for(var i=0,il=arguments.length;i<il;i++)
        if(arguments[0]==arguments[i])
            exist=1;
    return exist;
}
我真正的代码还有更多的比较,那么是否有一个更可读、更优雅的Javascript脚本来编写这篇文章呢?类似于SQL“IN”操作符:

if( json.reply IN ("d", "e", "i", "j", "k") )
谢谢你的建议

使用。它将返回找到的字母的索引,如果没有找到,则返回-1

["d", "e", "i", "j", "k"].indexOf("i")
> 2
["d", "e", "i", "j", "k"].indexOf("a")
> -1
使用。它将返回找到的字母的索引,如果没有找到,则返回-1

["d", "e", "i", "j", "k"].indexOf("i")
> 2
["d", "e", "i", "j", "k"].indexOf("a")
> -1

您可以创建一个包含所有允许答案的数组,然后查看回复是否在该数组中

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

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

不过,请注意,
indexOf
并不是所有版本的IE中都有。根据MDN,它出现在IE9中。您可以轻松地为没有它的版本编写自己的实现,特别是如果您使用jQuery(我为我的一个项目做了同样的事情)。

您可以创建一个包含所有允许答案的数组,然后查看回复是否在该数组中

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

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

不过,请注意,
indexOf
并不是所有版本的IE中都有。根据MDN,它出现在IE9中。您可以轻松地为没有它的版本编写自己的实现,特别是如果您使用jQuery(我为我的一个项目做了同样的事情)。

Switch语句是另一种可能的方式:

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

default: 
alert('also cool');
break;
}

Switch语句是另一种可能的方式:

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

default: 
alert('also cool');
break;
}

要避免可能缺少索引,请使用正则表达式:

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

如果您允许的回复可能包含正则表达式量词等,则您需要首先将其转义。

为避免可能缺少
索引,请使用正则表达式:

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

如果您允许的回复可能包含正则表达式量词等,那么您需要先将其转义。

您可以像这样重新编程该函数:

if(json.reply == "d" || json.reply == "e" || json.reply == "i" || json.reply == "j" || json.reply == "k" )
function IN()
{
    var exist=0;
    for(var i=0,il=arguments.length;i<il;i++)
        if(arguments[0]==arguments[i])
            exist=1;
    return exist;
}
然后您可以这样称呼它:
json.reply.IN(“d”、“e”、“i”、“j”、“k”)


还有小提琴:

您可以像这样重新编程函数:

if(json.reply == "d" || json.reply == "e" || json.reply == "i" || json.reply == "j" || json.reply == "k" )
function IN()
{
    var exist=0;
    for(var i=0,il=arguments.length;i<il;i++)
        if(arguments[0]==arguments[i])
            exist=1;
    return exist;
}
然后您可以这样称呼它:
json.reply.IN(“d”、“e”、“i”、“j”、“k”)


还有fiddle:

这是一个选项,但在进行一些搜索时,会发现indexOf刚刚添加到ECMAScript 5中,因此并不是在每个浏览器中都实现,因此我正在尝试找到一个包含更多内容的解决方案compatibility@masimao你可以随时跑步,不用担心。“indexOf是ECMA-262标准的最新补充;因此,它可能不会出现在所有浏览器中。您可以通过在脚本的开头插入以下代码来解决这个问题,允许在不支持indexOf的实现中使用indexOf。”在它上面有代码。您可以在字符串上执行indexOf,而不是在数组上执行indexOf:“deijk”。indexOf(“i”)。当然,这是假设“d”、“e”“,等等。这是一个选项,但在进行一些搜索时,会发现indexOf刚刚添加到ECMAScript 5中,因此并不是每个浏览器都实现了这一点,因此我试图找到一个包含更多内容的解决方案compatibility@masimao你可以随时跑步,不用担心。“indexOf是ECMA-262标准的最新补充;因此,它可能不会出现在所有浏览器中。您可以通过在脚本的开头插入以下代码来解决这个问题,允许在不支持indexOf的实现中使用indexOf。”在它上面有代码。您可以在字符串上执行indexOf,而不是在数组上执行indexOf:“deijk”。indexOf(“i”)。当然,这是假设“d”、“e”“,等等。这是一个选项,但在进行一些搜索时,会发现indexOf刚刚添加到ECMAScript 5中,因此并不是每个浏览器都实现了这一点,因此我试图找到一个包含更多内容的解决方案compatibility@masimaoJquery的功能是它是一个选项,但是在做一些搜索时,看到indexOf刚刚添加到ECMAScript 5中,由于这并不是在每个浏览器中都实现的,所以我试图找到一个包含更多内容的解决方案compatibility@masimaoJquery具有sweet函数,即使$.inArray(以及围绕可能丢失的Array.indexOf的类似包装)应该工作得更快。对于“散列”思维,仍然+1。)尽管$.inArray(以及可能丢失的Array.indexOf周围的类似包装)应该工作得更快,但它仍然很好。对于“散列”思维,仍然+1。)如果您只使用字符串,请创建一个字符串,用分隔符表示所有值,然后在该字符串上使用
.indexOf
,它比
数组.prototype.indexOf
有更广泛的支持<代码>var VAL=“d,e,i,j,k,”;如果(vals.indexOf(json.reply+',')!=-1{…
如果没有误报的可能性,你可以去掉
,“
分隔符。@MarcioSimao你不认为我们写
json.reply.IN(“d”、“e”、“i”、“j”、“k”)的方式是这样的吗;
我的答案更好?@Mageek,你的函数很好,但在我的情况下,我想要一个使用本机Javascript的解决方案,而不创建函数。谢谢你的建议,向上投票!一个疑问是,你的函数没有遗漏名为
il
的函数的参数吗?@MarcioSimao有一个输入错误(
而不是
),我更正了它。但是
il
不是一个参数,它是一个包含参数长度的变量(不是为每次迭代重新计算)。如果您只使用字符串,请创建一个字符串,用分隔符表示所有值,然后对该字符串使用
.indexOf
,它比
数组.prototype.indexOf
var vals=“d,e,i,j,k”,If(vals.indexOf(json.reply+,)!=-1{…
您可以摆脱
,”
delimiter,如果没有误报的可能性。@MarcioSimao您不认为我们编写
json.reply.IN(“d”、“e”、“i”、“j”、“k”);
的方式和我的答案更好吗?@magek,您的函数很好,但在我的情况下,我想要一个使用本机Javascript的解决方案,而不是创建一个有趣的解决方案