是否可以像这样使“等于”
if(index==1|12|23|34|45|56){
//do
}
或者它实际上必须使用这个:
if(index==1|index==12|index==23|index==34|index==45|index==56){
// do
}
但是如果那里有很多索引呢?
请告诉我?
是否可以像这样使“等于”
if(index==1|12|23|34|45|56){
//do
}
或者它实际上必须使用这个:
if(index==1|index==12|index==23|index==34|index==45|index==56){
// do
}
但是如果那里有很多索引呢?
请告诉我?
另一种方法是使用数组和indexOf
:
if ([1, 12, 23, 34, 45, 56].indexOf(index) != -1) {
// do your thing
}
如果您的浏览器不支持indexOf
,上面的链接中有一个实现。
不,这是不可能的,但是使用辅助函数,您可以做一些接近的事情:
if(inArray(index, [1, 12, 23, 34, 45, 56])) { ... }
这是实现:
function inArray(needle, haystack) {
var length = haystack.length;
for(var i = 0; i < length; i++) {
if(haystack[i] == needle) return true;
}
return false;
}
如果您不想使用Array.indexOf您可以在对象上进行测试(但这不适用于对象和类型):
var obj = {1: 1, 12: 1, 23: 1, 34: 1, 45: 1, 56: 1};
if( obj[index] ) {
// do
}
或制作一个字符串:(再次仅适用于字符串/数字)
var s = "," + [1, 12, 23, 34, 45, 56].join(",") + ",";
if ( s.indexOf( "," + index + "," ) !== -1 ) {
// do
}
将它们组合成一个字符串,indexOf 将自动强制类型!这也解决了一些旧浏览器缺乏 Array.indexOf 支持的问题!
if ("123456".indexOf(1)) {
// ...
}
现在,你可能会问自己...
“自我,如果我想组合更复杂的东西,就像美国所有的州一样?”*
那很容易!首先列出所有状态:
al ak az ar ca co ct de fl ga hi id il in ia ks ky
la me md ma mi mn ms mo mt ne nv nh nj nm ny nc nd
oh ok or pa ri sc sd tn tx ut vt va wa wv wi wy
然后通过将一个单词的开头字母与另一个单词的结尾字母连接起来,组合单词组以减少代码大小。重复直到你不能再组合它们。
if ("fl gal morilar mnvtnmt minde msd me ma mdct ncokscaky ny nh nj ne ohia pa utx wva waz wid wy vi pr".indexOf("ny")) {
alert("New York!");
}
警告:这样做可能会让你被贴上疯子的标签。