在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(它不支持IE8)。
if (['apple', 'cherry', 'orange', 'banana'].indexOf(value) >= 0) {
// found
}
为了支持IE8,你可以实现Mozilla的indexOf。
if (!Array.prototype.indexOf) {
// indexOf polyfill code here
}
通过String.prototype.match (docs)实现正则表达式。
if (fruit.match(/^(banana|lemon|mango|pineapple)$/)) {
}
我用过的一个技巧是
>>> ("something" in {"a string":"", "somthing":"", "another string":""})
false
>>> ("something" in {"a string":"", "something":"", "another string":""})
true
你可以这样做
>>> a = ["a string", "something", "another string"];
>>> b = {};
>>> for(var i=0; i<a.length;i++){b[a[i]]="";} /* Transform the array in a dict */
>>> ("something" in b)
true
谢谢你的问题,以及使用数组的解决方案。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
}