Как уменьшить итерацию синтаксиса переключателя - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть две переменные 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 голосов
/ 16 декабря 2018

Похоже (если 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()))
0 голосов
/ 16 декабря 2018

Чтобы уменьшить его до одного переключателя, используйте функцию.Отправьте clickDay или clickDay1 в качестве параметра и ожидайте, что результат будет возвращен.

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, если больше ничего не будет возвращено.

0 голосов
/ 16 декабря 2018

Используйте объект, ключи которого - полный день, а значения - сокращенная версия.Затем, чтобы определить day и day1, просто найдите clickDay или clickDay1 на объекте:

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];

Обратите внимание, что это присвоит undefined dayили day1, если переменная clickDay или clickDay1 не содержит одного из полных имен дня в объекте.

Если у вас было для использования подробного оператора 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);

Но объект является лучшим выбором, чем switch 99% времени.

...