2

我知道要声明多个变量,有一个快捷方式,例如var x=1,y=2,z=3.

现在,如果我有一个if测试 ONE 变量的语句,但对于许多值,例如:

if (x==1 || x==15 || x==25 || x==150){

}

由于x在现实生活中的例子会更长,我想找到一个快捷方式来枚举所有这些值,一个接一个,而不是每次都写变量的名称)

我该怎么做?

4

5 回答 5

4

您可以使用可能值的数组并测试以查看变量是否出现在其中。

if ([1, 15, 25, 150].indexOf(x) > -1) {

IE8 及更早版本不支持此功能。请参阅MDN 文档,其中包含针对旧浏览器的解决方法。

于 2012-08-07T18:55:52.017 回答
4

您是否考虑过 case-switch 语句?不是很花哨,但未被充分利用且易于阅读,并且可以移植到大多数其他编程语言:

switch (x) {
case 1:
case 15:
case 25:
case 150:
  // do something
  break;
}

如果您担心性能,我运行了一个jsPerf 测试用例,这种技术在 Chrome 中是最快的。

于 2012-08-07T18:57:32.723 回答
4

您可以使用 inArray 并执行此操作(跨浏览器兼容)

if(jQuery.inArray(x,[1,15,125,150]) > -1)
{
}
于 2012-08-07T18:57:52.160 回答
3

如果您有很多项目要检查,那么地图(使用 JavaScript 对象)可以很整洁并且适用于所有浏览器:

var items = {1:true, 15:true, 25:true, 150:true};
if (items[x] === true) {
    // Found x in items
}

对于大量的项目,映射是一种比线性搜索数组的其他示例更有效的查找机制。

我还发现它的代码维护起来比多行if语句要简单得多。

于 2012-08-07T19:05:03.423 回答
0

UnderscoreJS有一个 .any 函数:

var testArray = [1,15,125,150];
if (_.any(testArray, function (item) { return item === x; })) {
  // do stuff
}

该库具有许多处理数组的强大功能。

于 2012-08-07T19:26:21.047 回答