【问题标题】:Simplifying this JavaScript-switch简化这个 JavaScript 开关
【发布时间】:2013-10-24 17:15:45
【问题描述】:

我想要一些关于如何瘦身这个开关的建议:

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 等于winningLot 数组中的一个或多个值,它应该输出“You win!”。 有人可以确认我的代码符合我给出的描述吗?

【问题讨论】:

  • 这不会做你想做的事。第一个脚本更接近使用开关的正确方法。它很冗长,但它是正确的方法。此外,您正在滥用 | 字符。它是按位或运算。所以你实际上是在运算符之间做一些数学运算,而不是选择一个或另一个 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 你误解了'|'操作员。这是一个二元 OR 运算符。你将永远在你的代码中需要这个,除非你知道你这样做。
  • @PatrickGunderson:你建议如何让它变得苗条和一口大小?
  • | 是二进制或。 0|1|2|3|4|5|6|7 将始终等于 7,因此这是您的第一个问题。
  • @JohannBehrens 您的第一个代码是正确的(尽管第一行中有 |)。它没有比这更多的一口大小了。

标签: javascript arrays switch-statement


【解决方案1】:

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

【讨论】:

  • 读入 indexOf() 我完全清楚!谢谢你的回答:)
  • 另外一个问题,如果我想记录特定于数组某个位置的内容怎么办?
  • @JohannBehrens 使用第二个代码并在 if 语句中插入 console.log() 或任何您喜欢的内容。
【解决方案2】:

你可以简单地使用indexOf:

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

【讨论】:

    【解决方案3】:

    首先,您错误地使用了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!");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多