JavaScript:将变量与值数组进行比较

8
在Javascript中,我正在执行以下操作,这很好用。
if (myVar == 25 || myVar == 26 || myVar == 27 || myVar == 28)
 {
   //do something
 }

我该如何缩短它呢?就像下面这样。
if (myVar IN ('25','26','27','28')) {
    //do something
   }

或者

if(myVar.indexOf("25","26","27","28") > -1) ) {//do something}
6个回答

24
你可以使用 Array.indexOf(),它返回一个给定元素在数组中第一次出现的索引位置,如果不存在则返回-1

var arr = [25, 26, 27, 28];
console.log(arr.indexOf(25) > -1);
console.log(arr.indexOf(31) > -1);


Array.includes() 方法也可以用来返回布尔值 boolean


var arr = [25, 26, 27, 28];
console.log(arr.includes(25));
console.log(arr.includes(31));


9

只需尝试以下操作:

if ( [25, 26, 27, 28].indexOf(myVar) > -1 ) {}

3
请参考 https://dev59.com/MnI-5IYBdhLWcg3wpqMK,以确保兼容性。该链接提供了如何修复Internet Explorer浏览器中JavaScript的indexOf()方法的问题。 - Fabio Filippi
如该线程所示,如果您正在使用jQuery,则可以使用$.inArray(函数。 - JLRishe

3

其他方法:

myVar = (myVar == parseInt(myVar) ? myVar : false); //to check if variable is an integer and not float
if ( myVar >= 25 && myVar <= 28){}

演示实例

根据Anthony Grist的评论编辑

如果您知道这些值将是什么(即它们不是动态的),并且您的数组包含一系列连续的数字值,则此方法可行。


1
> 24 && < 29 更短 :) - Fabrizio Calderan
2
如果您知道这些值将是什么(即它们不是动态的),并且您的数组包含一系列连续的数字值,那么就没问题了。 - Anthony Grist

3

由于 indexOf() 在某些浏览器上存在兼容性问题并且需要额外的步骤(将结果与-1比较),因此,以下是一种跨浏览器的替代方法,使用jQuery实用程序方法(如果在项目中包含jQuery):

if($.inArray(myVar, [25, 26, 27, 28]) > -1) {
     // ... do something ... 
}

1

如果 ( [25, 26, 27, 28].indexOf(myVar) > -1 ) {}

Array.indexOf在所有现代浏览器(FF,Chrome,>IE8)上都可以正常工作,只是需要注意的是Array.indexOf不适用于IE8。 如果您想使其在IE8中正常工作,请使用以下代码:

window.onload = function() {

if (!Array.prototype.indexOf) {

Array.prototype.indexOf = function(elt /*, from*/) {
  var len = this.length >>> 0;
  var from = Number(arguments[1]) || 0;
  from = (from < 0) ? Math.ceil(from) : Math.floor(from);
  if (from < 0) {
    from += len;
  }
  for (; from < len; from++) {
    if (from in this && this[from] === elt){
      return from;
  }
}
return -1;

};

}

}


0
var validValues = [25, 26, 27, 28]
var myVar = 25

if (validValues.includes(myVar)) {
    //do something
}

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