是否有更简单的方法确定一个变量是否等于一系列值,例如:
if x === 5 || 6
而不是像这样晦涩的东西:
if x === 5 || x === 6
?
是否有更简单的方法确定一个变量是否等于一系列值,例如:
if x === 5 || 6
而不是像这样晦涩的东西:
if x === 5 || x === 6
?
a == 1 || a == 2
,这样可能更快。 - Reid$.inArray
提供了自己的实现。我不熟悉其他框架,但我相信它们都会以某种方式包含这样的功能。 - Reid['a','b'].includes('a')
。 - Devmaleeq取决于您执行的测试类型。如果有静态字符串,可以通过正则表达式轻松检查:
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
。幸运的是,有一个Polyfill可用。如果你正在努力Polyfill 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
只会检查对象本身,因此请注意它们的不同之处。
完全没问题。如果你有更长的值列表,也许可以使用以下方法:
if ([5,6,7,8].indexOf(x) > -1) {
}
是的,您可以使用自己的函数。此示例使用.some
方法:
var foo = [ 5, 6 ].some(function(val) {
return val === x;
});
foo; // true
这是我决定使用的:
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
}
如果您不想允许类型强制转换(indexOf
不会这样做),请将两个==
更改为===
。目前为止:
fav = "4231";
plu.indexOf(fav) //-1
fav.isin(plu) //true
不会,可能有一些特定情况下的技巧,但总体上我编写代码的方式如下:
if (someVariable === 1 ||
someVariable === 2 ||
someVariable === 7 ||
someVariable === 12 ||
someVariable === 14 ||
someVariable === 19) {
doStuff();
moreStuff();
} else {
differentStuff();
}
[编辑]这个方案似乎可以工作,但正如丹指出的那样,它实际上是一个错误的结果。不要使用这种方法。我将其保留在此供教育目的。
我所知道的最简单的方法:
a = [1,2,3,4,5];
if(3 in a) alert("true"); // will alert true
在Chrome控制台中测试过。不确定它是否适用于其他浏览器。
3 in [1, 3]
- 它会返回 false
,因为在数组 [1, 3]
中没有 索引为 3 的元素。同样地,3 in ['a', 'b', 'c', 'd']
将返回 true。 - Dan Dascalescu
indexOf
函数。要么你也可以用正则表达式/^(New York|Austin|Alberta)$/.test(x)
。 - João Silva