如何减少开关语法的迭代

时间:2018-12-16 04:55:10

标签: javascript switch-statement

我有两个变量clickDay和clickDay1,如果我用两个开关语法编写代码,则可以正常工作。但是我不知道如何简化为一种开关语法。

这是我的原始代码

let day;
        let day1;
        switch (clickDay) {
            case 'monday':
                day = 'mon';
                break;
            case 'Tuesday':
                day = 'tue';
                break;
            case 'Wednesday':
                day = 'wed';
                break;
            case 'Thursday':
                day = 'tur';
                break;
            case 'Friday':
                day = 'fri';
                break;
        }
        switch (clickDay1) {
            case 'monday':
                day = 'mon';
                break;
            case 'Tuesday':
                day = 'tue';
                break;
            case 'Wednesday':
                day = 'wed';
                break;
            case 'Thursday':
                day = 'tur';
                break;
            case 'Friday':
                day = 'fri';
                break;
        }

3 个答案:

答案 0 :(得分:1)

使用一个对象,该对象的键是一整天,而值是缩写形式。然后,要确定dayday1,只需在对象上查找clickDayclickDay1

const days = {
  monday: 'mon', // should the "m" be capitalized?
  Tuesday: 'tue',
  Wednesday: 'wed',
  Thursday: 'tur', // should this be `thu`?
  Friday: 'fri',
};

const day = days[clickDay];
const day1 = days[clickDay1];

请注意,如果undefinedday变量中不包含全天名称之一,则会将day1分配给clickDayclickDay1。对象。

如果出于任何原因(不建议)不得不使用冗长的switch语句,则必须将其放在函数中:

function getDay(fullDay) {
  let day;
  switch (fullDay) {
    case 'monday':
      day = 'mon';
      break;
    case 'Tuesday':
      day = 'tue';
      break;
    case 'Wednesday':
      day = 'wed';
      break;
    case 'Thursday':
      day = 'tur';
      break;
    case 'Friday':
      day = 'fri';
      break;
  }
  return day;
}
const day = getDay(clickDay);
const day1 = getDay(clickDay1);

但是,有99%的时间比switch更好的选择对象。

答案 1 :(得分:1)

(假设tur是一个错字),您所有的日子只是前三个字母的小写字母:

因此您可以使用:

let day = clickDay.slice(0,3).toLowerCase()

并完成它。假设您知道clickDay是一周中的有效日期。

let days = [
  "Monday",
  "Tuesday",
  "Wednesday",
  "Thursday",
  "Friday",
  "Saturday",
  "Sunday"
]

days.forEach(clickDay => console.log(clickDay.slice(0,3).toLowerCase()))

答案 2 :(得分:0)

要将其简化为一个开关,请使用一个功能。发送clickDayclickDay1作为参数,并期望返回结果。

function abreviate(day) {
    switch (day) {
        case 'monday':
            return 'mon';
        case 'Tuesday':
            return 'tue';
        case 'Wednesday':
            return 'wed';
        case 'Thursday':
            return 'tur';
        case 'Friday':
            return 'fri';
    }
}

let day = abreviate(clickDay);
let day1 = abreviate(clickDay1);

请考虑switch语句没有default。如果未返回任何其他内容,则会导致undefined