在JS中使'EQUAL'中的'OR'

时间:2012-11-17 12:44:02

标签: javascript

是否有可能像这样做'等于'

if(index==1|12|23|34|45|56){
    //do
}

或者它实际上必须使用它:

if(index==1|index==12|index==23|index==34|index==45|index==56){
    // do
}

但是如果有很多索引呢?

请告诉我?

4 个答案:

答案 0 :(得分:3)

另一种方法是使用数组和indexOf

if ([1, 12, 23, 34, 45, 56].indexOf(index) != -1) {
  // do your thing
}

如果您的浏览器不支持indexOf,则上述链接中有一个实现。

答案 1 :(得分:2)

不,那是不可能的,但是有了辅助功能,你可以做一些接近的事情:

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;
}

答案 2 :(得分:1)

如果您不想使用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
}

答案 3 :(得分:0)

将它们组合成一个字符串,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!");
}

警告:这样做可能会让你被标记为疯子。