在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}
答案 0 :(得分:18)
您可以使用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));
答案 1 :(得分:9)
试试:
if ( [25, 26, 27, 28].indexOf(myVar) > -1 ) {}
答案 2 :(得分:3)
其他方式:
myVar = (myVar == parseInt(myVar) ? myVar : false); //to check if variable is an integer and not float
if ( myVar >= 25 && myVar <= 28){}
编辑 根据Anthony Grist的评论
如果您知道这些值将是什么(即它们不是动态的),并且您的数组包含一系列连续的数值,这种方式就有效。
答案 3 :(得分:3)
由于indexOf()
,有一些浏览器兼容性问题,需要一个额外的步骤(将结果与-1进行比较),另一种跨浏览器方法是以下jQuery实用程序方法(如果你在你的jQuery中包含jQuery)项目):
if($.inArray(myVar, [25, 26, 27, 28]) > -1) {
// ... do something ...
}
答案 4 :(得分:1)
if([25,26,27,28] .indexOf(myVar)&gt; -1){}
Array.indexOf适用于所有现代浏览器(FF,Chrome,&gt; 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;
};
}
}