简化这个JavaScript开关

时间:2013-10-24 17:15:45

标签: javascript arrays switch-statement

我想就如何减少这种转换提出一些建议:

switch (lotUser | winningLot) {
        case lotUser === winningLot[0]:
        case lotUser === winningLot[1]:
        case lotUser === winningLot[2]:
        case lotUser === winningLot[3]:
        case lotUser === winningLot[4]:
        case lotUser === winningLot[5]:
        case lotUser === winningLot[6]:
        case lotUser === winningLot[7]:
            console.log("You win!");
            break;
        default:
            console.log("You do not win!");
            break;
    }

而不是

case lotUser === winningLot[0]:

我写的脚本是:

switch (lotUser | winnendLot) {
    case lotUser === winnendLot[0|1|2|3|4|5|6|7]:
        console.log("You win!");
        break;
    default:
        console.log("You do not win!");
        break;
}

我只是不知道这是否按照我希望的方式工作。它需要检查生成的lotUser是否等于数组中的一个值(winningLot)。如果lotUser等于winnerLot数组中的一个或多个值,则应输出“You win!”。 有人可以确认我的代码是否符合我的描述?

3 个答案:

答案 0 :(得分:5)

Array.prototype.indexOf()?

怎么样?
if (winnedLot.indexOf(lotUser) !== -1) {
  console.log("Won!");
}
else {
  console.log("Lost!");
}

它在数组中搜索lotUser中存储的第一个值,并返回其各自的索引。

由于您不需要计算出现次数,因此这应该是最好的方法。


如果要计算它们,请使用循环:

var count = 0;

for (var i=0, len=winnedLot.length; i<len; i++) {
  if (winnedLot[i] === lotUser) {
    count++;
  }
}

答案 1 :(得分:2)

您只需使用indexOf

即可
if(winningLot.indexOf(lotUser) >= 0) {
    ...
} else {
    ...
}

答案 2 :(得分:1)

对于初学者来说,你错误地使用了switch。要比较的值位于switch(...)部分,每个case ...:

列出了可能的值

无论如何,除此之外,你想要的只是检查lotUser数组中是否winnendLot。易:

// assuming supporting browser:
if( winnendLot.indexOf(lotUser) > -1) console.log("You win!");

// full browser support:
var winner = false, l = winnendLot.length, i;
for( i=0; i<l; i++) {
    if( winnendLot[i] === lotUser) {
        winner = true;
        break;
    }
}
if( winner) console.log("You won!");