在SQL中,我们可以看到一个字符串是否像这样在一个列表中:
Column IN ('a', 'b', 'c')
JavaScript中有什么好方法呢?这样做太笨拙了:
if (expression1 || expression2 || str === 'a' || str === 'b' || str === 'c') {
// do something
}
我不确定它的表现和清晰度:
if (expression1 || expression2 || {a:1, b:1, c:1}[str]) {
// do something
}
或者可以使用switch函数:
var str = 'a',
flag = false;
switch (str) {
case 'a':
case 'b':
case 'c':
flag = true;
default:
}
if (expression1 || expression2 || flag) {
// do something
}
但这是一个可怕的混乱。什么好主意吗?
在这种情况下,我必须使用Internet Explorer 7,因为它是用于公司内部网页面的。所以['a', 'b', 'c']. indexof (str) !== -1如果没有一些语法糖就不能正常工作。
谢谢你的问题,以及使用数组的解决方案。indexOf方法。
我使用这个解决方案的代码创建了一个inList()函数,在我看来,这将使写作更简单,阅读更清晰:
function inList(psString, psList)
{
var laList = psList.split(',');
var i = laList.length;
while (i--) {
if (laList[i] === psString) return true;
}
return false;
}
用法:
if (inList('Houston', 'LA,New York,Houston') {
// THEN do something when your string is in the list
}
这是我的:
String.prototype.inList=function(list){
return (Array.apply(null, arguments).indexOf(this.toString()) != -1)
}
var x = 'abc';
if (x.inList('aaa','bbb','abc'))
console.log('yes');
else
console.log('no');
如果你可以传递一个数组,这个会更快:
String.prototype.inList=function(list){
return (list.indexOf(this.toString()) != -1)
}
var x = 'abc';
if (x.inList(['aaa','bbb','abc']))
console.log('yes')
下面是jsperf: http://jsperf.com/bmcgin-inlsit