1

是否可以像这样使“等于”

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

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

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

但是如果那里有很多索引呢?

请告诉我?

4

4 回答 4

3

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

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

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

于 2012-11-17T12:46:42.323 回答
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;
}
于 2012-11-17T12:46:52.947 回答
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
}
于 2012-11-17T12:52:27.100 回答
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!");
}

警告:这样做可能会让你被贴上疯子的标签。

于 2012-11-17T13:02:32.833 回答