2017-02-04 4 views
1

Мне нужна функция, которая возвращает число при отправке в день (например, «пятница») и в день, когда вы отправляете число (например, 06"). Функция должна получить параметр, содержащий либо число, либо дневную строку. Я попытался сделать переключатель, но он, похоже, не работает.Функция, которая возвращает день или число в зависимости от параметра - Javascript

function dayPick(day) { 

    let value; 

    switch (day) { 
     case "friday" || "05": 
      if (day === "friday") { 
       value = "05"; 
      } else { 
       value = "friday" 
      } 

      break; 
     case "saturday" || "06": 
      if (day === "saturday") { 
       value = "06"; 
      } else { 
       value = "saturday"; 
      } 

      break; 
     case "sunday" || "07": 
      if (day === "sunday") { 
       value = "07"; 
      } else { 
       value = "sunday"; 
      } 

      break; 
    } 

    return value; 
} 

Любые предложения?

+1

Немного избыточно проверять, есть ли вход «пятница» или «05» «один раз», а затем также проверить, какой из них должен возвращать две совершенно разные вещи. Вместо этого вы должны, вероятно, иметь «case» friday »и« case »05« 'как отдельные вещи. Вероятно, было бы лучше, если бы вы отделили логику от разных функций, а также - иметь тот, который дает разные результаты, немного странно. – vlaz

ответ

1

В основном вы отметите этот

if (day === ("friday" || "05")) {} 

, который проверяет только для строки 'friday', поскольку 'friday' является truthy значение и чек с строги равными.

Лучше использовать чек на одно значение, как этот

switch (day) { 
    case "friday": 
     value = "05"; 
     break; 
    case "05": 
     value = "friday"; 
     break; 
    case "saturday": 
     value = "06"; 
     break; 
    case "06": 
     value = "saturday"; 
     break; 
    case "sunday": 
     value = "07"; 
     break; 
    case "07": 
     value = "sunday"; 
     break; 
} 

или объект, как

var values = { 
    friday: "05", 
    "05": "friday", 
    saturday: "06", 
    "06": "saturday", 
    sunday: "07", 
    "07": "sunday" 
}; 

Использование

value = values[day]; 
2

Как насчет такого подхода?

function dayPick(day) { 
    var days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']; 
    if (isNaN(day)) { 
     // Day is literal 
     return days.indexOf(day) + 1; 
    } else { 
     // Day is numeric 
     return days[day-1]; 
    } 
} 
2

function getDay(dayOrNum) { 
 
    const week = ['mon', 'tue', 'wed','thur','fri','sat','sun']; 
 
    
 
if (typeof dayOrNum === 'number') { 
 
    return week[dayOrNum - 1]; 
 
} else { 
 
    return week.indexOf(dayOrNum) + 1; 
 
} 
 
} 
 

 
console.log(getDay(1)); // output 'mon' 
 
console.log(getDay('mon')); //output 1