JavaScript,jQuery-检查值是否存在于数组中

15

有没有更好的方法在 if 语句中检查多个项是否与变量匹配

我有三个 if 语句,需要查看一个项目是否与名为 code 的数组/变量相匹配。有很多项目需要与 code 数组/变量进行比较,因此我不得不使用 | 来重复每个项目。是否有更有效的方法,或者我可以创建一个数组,在使用一次后检查 code 是否等于数组中的任何项目?

这是我目前的代码:

onLabelShow: function(event, label, code){
        if (code == "US-AL" | code == "US-AZ" | code == "US-CA" | code == "US-CT" | code == "US-FL" | code == "US-HI" | code == "US-ID" | code == "US-IL" | code == "US-IA" | code == "US-LA" | code == "US-ME" | code == "US-MD" | code == "US-MA" | code == "US-MO" | code == "US-NE" | code == "US-NV" | code == "US-NJ" | code == "US-NM" | code == "US-NY" | code == "US-OH" | code == "US-OK" | code == "US-OR" | code == "US-PA" | code == "US-TN" | code == "US-UT" | code == "US-VA" | code == "US-CA" | code == "US-WA" | code == "US-NC" ) {
            //do nothing
        }
        else if (code) { //if a state is not specified in var stateRedirects then prevent default
            event.preventDefault();
        }                   
    },      
    onRegionOver: function(event, code){
        if (code == "US-AL" | code == "US-AZ" | code == "US-CA" | code == "US-CT" | code == "US-FL" | code == "US-HI" | code == "US-ID" | code == "US-IL" | code == "US-IA" | code == "US-LA" | code == "US-ME" | code == "US-MD" | code == "US-MA" | code == "US-MO" | code == "US-NE" | code == "US-NV" | code == "US-NJ" | code == "US-NM" | code == "US-NY" | code == "US-OH" | code == "US-OK" | code == "US-OR" | code == "US-PA" | code == "US-TN" | code == "US-UT" | code == "US-VA" | code == "US-CA" | code == "US-WA" | code == "US-NC" ) {
            //do nothing
        }
        else if (code) { //if a state is not specified in var stateRedirects then prevent default
            event.preventDefault();
        }                   
    },
    onRegionClick: function (event, code) {
        if (code == "US-AL" | code == "US-AZ" | code == "US-CA" | code == "US-CT" | code == "US-FL" | code == "US-HI" | code == "US-ID" | code == "US-IL" | code == "US-IA" | code == "US-LA" | code == "US-ME" | code == "US-MD" | code == "US-MA" | code == "US-MO" | code == "US-NE" | code == "US-NV" | code == "US-NJ" | code == "US-NM" | code == "US-NY" | code == "US-OH" | code == "US-OK" | code == "US-OR" | code == "US-PA" | code == "US-TN" | code == "US-UT" | code == "US-VA" | code == "US-CA" | code == "US-WA" | code == "US-NC" ) {
            window.location = '/' + code;
        }
        else if (code) { //if a state is not specified in var stateRedirects then prevent default
            //event.preventDefault();
        }   

    }   

非常感谢您的帮助、示例或代码!我尝试使用for each,但我认为我不知道如何将其与数组一起使用。


更多讨论请参见:https://dev59.com/E3VC5IYBdhLWcg3wnCj6 - Radu
2个回答

52
var codes = ["US-AL", "US-AZ", ... ];


if($.inArray(code, codes) > -1){
    //do something    
}

更新: 结合@Deestan的建议,这可以被重写为...

function isValidCode(code){
    return ($.inArray(code, codes) > -1);
}

5
我建议将此内容包装在一个名为“isValidCode”的函数中。 - Deestan
如果您已经在使用jQuery,那么这可能是更好的解决方案。$.inArray的内部实现:http://jsfiddle.net/HB3jr/ - Radu
2
+1,同时也展示了如何在第一次声明数组时,这可能很容易成为下一个问题,因为提问者承认不知道足够的知识来用数组解决他们的问题。 - Chris
1
如果您正在使用underscore,则另一个选项是:http://underscorejs.org/#indexOf - Radu
哇!这看起来很棒!让我看看能否弄清楚如何替换我现有的内容。那么我应该在if语句中使用isValidCode吗? - Aaron
@Aaron:是的。而且,由于您的所有处理程序都做同样的事情,您应该将其作为一个整体函数,并在所有地方使用它,例如 - onRegionClick:checkCodeonRegionOver:checkCode,以及其他所有处理程序。 - Robin Maben

15

Yep

array.indexOf(searchElement[, fromIndex])


2
这也是正确的。 :) 他标记了jQuery,所以我想为什么不使用jQuery的等价物呢。 - Robin Maben

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接