关于匹配多项

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>

<body>
  <script>
    switch ("中雪") {
      case "晴" || "小雪转晴" || "多云转晴" || "阵雪转晴" || "阴转晴" || "扬沙转晴" || "浮尘转晴" || "阵雨转晴" || "小雨转晴" || "雨夹雪转晴" || "多云转扬沙" || "晴转扬沙":
        console.log(1)
        break;
      case "阴" || "多云" || "雾" || "扬沙" || "霾" || "浮尘" || "晴转多云" || "多云转阴" || "晴转阴" || "阴转多云" || "小雪转多云" || "小雨转多云" || "阵雨转多云" || "小雪转阴" || "阵雪转阴" || "扬沙转多云" || "小雨转阴" || "中雨转多云" || "雾转多云" || "中雨转阴" || "阵雨转阴" || "雨夹雪转多云" || "小到中雨转阴" || "雨夹雪转阴" || "多云转雾" || "中雪转多云" || "雷阵雨转多云" || "扬沙转阴" || "浮尘转霾" || "晴转霾" || "霾转阴" || "霾转多云" || "霾转晴" || "小到中雪转多云" || "大雪转多云" || "大雨转阴" || "浮尘转多云" || "多云转霾" || "晴转雾" || "阴转雾":
        $console.log(2)
        break;
      case "小雪" || "中雪" || "大雪" || "多云转雨夹雪" || "阴转小雪" || "阵雪转多云" || "阴转阵雪" || "多云转中雪" || "晴转中雪" || "多云转大雪" || "阴转中雪" || "阴转大雪" || "雨夹雪转小雪" || "小雨转大雪" || "雨夹雪转大雪" || "雨夹雪转中雪" || "晴转大雪" || "小雪转阵雪" || "小雪转中雪" || "多云转小到中雪" || "大雪转小雪" || "中雨转中雪" || "中雪转小雪" || "小雨转中雪" || "阵雨转小雪" || "小雨转小雪" || "小雨转阵雪" || "阵雪转小雪" || "晴转阵雪" || "晴转小雪" || "多云转小雪" || "中雨转小雪" || "阵雪" || "暴雪" || "多云转阵雪":
        console.log(3)
        break;
      case "雨夹雪" || "小雨" || "小雪转雨夹雪" || "中雨" || "阵雨" || "大雨" || "多云转小雨" || "多云转阵雨" || "晴转雨夹雪" || "阴转小雨" || "小雨转中雨" || "中雨转小雨" || "阴转中雨" || "多云转中雨" || "小雨转大雨" || "阵雨转中雨" || "阵雨转大雨" || "阴转大雨" || "阵雨转小雨" || "晴转小雨" || "多云转大雨" || "小雨转暴雨" || "阵雨转中到大雨" || "小雨转阵雨" || "阴转阵雨" || "小雨转小到中雨" || "小到中雨转小雨" || "晴转阵雨" || "中雨转阵雨" || "小雨转雨夹雪" || "阴转雨夹雪" || "中雨转大雨" || "阵雨转雨夹雪" || "多云转小到中雨" || "小到中雨" || "小到中雨转阵雨" || "雷阵雨转阵雨" || "雨夹雪转小雨":
        console.log(4)
        break;
      // case "暴雨" || "雷阵雨" || "大暴雨" || "阵雨转雷阵雨" || "晴转雷阵雨":
      //   console.log(5)
      //   break;
      default:
        console.log(5)
    }
  </script>
</body>

</html>

可能标题表述的不是太清楚,可代码您可能会理解我的需求
就是当匹配一个值的时候,打印不同的console
但是目前问题在于我的匹配条件有多个,是通过||进行分割
经测试此写法无效
我已知indexof可以解决此需求,但总感觉书写出来不满意
还望指点有没有更好的办法,谢谢!

阅读 2.2k
3 个回答
let result = null;
let str = "雪";
let config = {
    1: ["雨", "雪"]
};

for(let key in config){
    result = result ? result : config[key].includes(str) && key;
}

console.log(result)

因为case valueN是匹配switch (expression)的子句,它是一个值,而非一个表达式或语句,所以你的不生效。如果你想用switch,你可以这样写:

#### 多 case - 单一操作

switch (expression) {
  case '晴':
  case '小雪转晴':
  case '多云转晴':
  case '阵雪转晴':
    console.log('1');
    break;
  case '':
    ...
  default:
    console.log('default');
}
const allWeather = ['晴', '小雨', '多云转晴', '扬沙', '中雪', '大雨', '阴转阵雪', '晴转多云', '中雨', '雾', '多云']
const rainArr = ['小雨', '中雨', '阵雨', '大雨']
 
const isRainDay = () => {
 return rainArr.some(v => allWeather.includes(v))
}

if ( isRainDay() ) {
  console.log('雨天')
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题