JavaScript:检查变量是否等于两个或更多值的简单方法?

时间:2012-08-24 20:39:05

标签: javascript comparison

是否有更简单的方法来确定变量是否等于一系列值,例如:

if x === 5 || 6 

而不是像:

这样的东西
if x === 5 || x === 6

8 个答案:

答案 0 :(得分:68)

您可以将数值存储在数组中,并使用[].indexOf检查数组中是否存在该变量:

if([5, 6].indexOf(x) > -1) {
  // ...
}

如果返回-1,则该变量在数组中不存在。

答案 1 :(得分:23)

取决于您正在进行的测试类型。如果你有静态字符串,这很容易通过正则表达式检查:

if (/^[56ab]$/.test(item)) {
//-or-
if (/^(foo|bar|baz|fizz|buzz)$/.test(item)) {
    doStuff();
} else {
    doOtherStuff();
}

如果您有一小组值(字符串或数字),则可以使用switch

switch (item) {
case 1:
case 2:
case 3:
    doStuff();
    break;
default:
    doOtherStuff();
    break;
}

如果您有很长的值列表,则应该使用包含~arr.indexOf(item)arr.contains(item)的数组:

vals = [1,3,18,3902,...];
if (~vals.indexOf(item)) {
    doStuff();
} else {
    doOtherStuff();
}

不幸的是,某些浏览器不支持Array.prototype.indexOf。幸运的是a polyfill is available。如果您遇到填充Array.prototype.indexOf的麻烦,您也可以添加Array.prototype.contains

根据您关联数据的方式,您可以将对象中的动态字符串列表存储为其他相关信息的地图:

var map = {
    foo: bar,
    fizz: buzz
}
if (item in map) {
//-or-
if (map.hasOwnProperty(item)) {
    doStuff(map[item]);
} else {
    doOtherStuff();
}

in将检查整个原型链,而Object.prototype.hasOwnProperty只检查对象,因此请注意它们是不同的。

答案 2 :(得分:16)

完全没问题。如果您有更长的值列表,也许您可​​以使用以下代码:

if ([5,6,7,8].indexOf(x) > -1) {
}

答案 3 :(得分:7)

是。您可以使用自己的功能。此示例使用.some

var foo = [ 5, 6 ].some(function(val) {
     return val === x;
   });

foo; // true

答案 4 :(得分:3)

这是我决定使用的:

Object.prototype.isin = function() {
    for(var i = arguments.length; i--;) {
        var a = arguments[i];
        if(a.constructor === Array) {
            for(var j = a.length; j--;)
                if(a[j] == this) return true;
        }
        else if(a == this) return true;
    }
    return false;
}

您可以这样使用它:

var fav   = 'pear',
    fruit = ['apple', 'banana', 'orange', 'pear'],
    plu   = [4152, 4231, 3030, 4409];

if (fav.isin(fruit, plu, 'eggs', 'cheese')) {
    //do something cool
}

优点是:

  • 适用于IE< 9;
  • 从左到右自然地读取;
  • 您可以为其提供数组或单独的值。

如果您不想允许类型强制(indexOf没有),请将两个==更改为===。目前的情况:

fav = "4231";
plu.indexOf(fav) //-1
fav.isin(plu)    //true

答案 5 :(得分:1)

不,可能会有一些特定于案例的技巧,但一般来说我会写这样的代码:

if (someVariable === 1 ||
    someVariable === 2 ||
    someVariable === 7 ||
    someVariable === 12 ||
    someVariable === 14 ||
    someVariable === 19) {

    doStuff();
    moreStuff();

} else {
    differentStuff();
}

答案 6 :(得分:0)

简单的答案是否定的。您可以使用switch语句,如果您要比较大量字符串值,则更容易阅读,但将其用于两个值看起来不会更好。

答案 7 :(得分:-1)

[编辑]这似乎有效,但丹指出,这实际上是误报。不要使用这种方法。我把它留在这里用于教育目的。

我知道最简单的方式:

a = [1,2,3,4,5];

if(3 in a) alert("true"); // will alert true

在Chrome控制台中测试。不确定它是否适用于其他浏览器。