JavaScript: Simple way to check if variable is equal to two or more values?
本问题已经有最佳答案,请猛点这里访问。
有没有更容易的方式,在确定如果一个变量是平等的一个范围值,如:
1 | if x === 5 || 6 |
我obtuse比什么样:
1 | if x === 5 || x === 6 |
???????
您可以将值存储在数组中,并使用
1 2 3 | if([5, 6].indexOf(x) > -1) { // ... } |
如果返回
取决于你正在进行什么样的测试。如果您有静态字符串,那么很容易通过正则表达式进行检查:
1 2 3 4 5 6 7 | if (/^[56ab]$/.test(item)) { //-or- if (/^(foo|bar|baz|fizz|buzz)$/.test(item)) { doStuff(); } else { doOtherStuff(); } |
如果您有一组很小的值(字符串或数字),则可以使用
1 2 3 4 5 6 7 8 9 10 | switch (item) { case 1: case 2: case 3: doStuff(); break; default: doOtherStuff(); break; } |
如果您有一个长的值列表,那么您可能应该使用一个带有
1 2 3 4 5 6 | vals = [1,3,18,3902,...]; if (~vals.indexOf(item)) { doStuff(); } else { doOtherStuff(); } |
不幸的是,在一些浏览器中不支持EDOCX1 6。幸运的是,有一种聚填料。如果你遇到了填充
根据如何关联数据,可以将对象内的字符串动态列表存储为映射到其他相关信息:
1 2 3 4 5 6 7 8 9 10 11 | var map = { foo: bar, fizz: buzz } if (item in map) { //-or- if (map.hasOwnProperty(item)) { doStuff(map[item]); } else { doOtherStuff(); } |
<子> EDCOX1 9将检查整个原型链,而EDCOX1(10)将只检查对象,所以注意它们是不同的。< / SUB>
很好。如果您有一个更长的值列表,也许您可以使用以下内容:
1 2 | if ([5,6,7,8].indexOf(x) > -1) { } |
对。你可以使用你自己的功能。本例使用
1 2 3 4 5 | var foo = [ 5, 6 ].some(function(val) { return val === x; }); foo; // true |
这是我决定使用的:
1 2 3 4 5 6 7 8 9 10 11 | 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; } |
您可以这样使用它:
1 2 3 4 5 6 7 | 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时工作;
- 从左到右自然读;
- 您可以为它提供数组或单独的值。
如果不允许类型强制(
1 2 3 | fav ="4231"; plu.indexOf(fav) //-1 fav.isin(plu) //true |
不,可能有一些特定于具体情况的技巧,但一般来说,我编写的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | if (someVariable === 1 || someVariable === 2 || someVariable === 7 || someVariable === 12 || someVariable === 14 || someVariable === 19) { doStuff(); moreStuff(); } else { differentStuff(); } |
[编辑]这似乎有效,但正如丹指出的,这实际上是一个误报。不要使用这种方法。我把它留在这里是为了教育目的。
最简单的方法我知道:
1 2 3 | a = [1,2,3,4,5]; if(3 in a) alert("true"); // will alert true |
在Chrome控制台中测试。不确定它是否在其他浏览器中工作。
简单的答案是"否"。您可以使用switch语句,如果比较大量的字符串值,则更容易阅读该语句,但将其用于两个值并不会有更好的效果。