简化这个JavaScript开关

Joh*_*ens 1 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;
    }
Run Code Online (Sandbox Code Playgroud)

代替

case lotUser === winningLot[0]:
Run Code Online (Sandbox Code Playgroud)

我写的脚本是:

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;
}
Run Code Online (Sandbox Code Playgroud)

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

Com*_*eek 5

那么Array.prototype.indexOf()呢?

if (winnedLot.indexOf(lotUser) !== -1) {
  console.log("Won!");
}
else {
  console.log("Lost!");
}
Run Code Online (Sandbox Code Playgroud)

它在数组中搜索存储的第一个值,lotUser并返回其相应的索引.

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


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

var count = 0;

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