2017-01-09 4 views
1

Я пытаюсь обрабатывать несколько условий для формата даты в своем приложении и использовать для этого метод переключения. Функция выглядит хорошо, но проблема в том, что ничто из условий моих дел не работает. Я понимаю, что что-то не так с условием, но не могу понять, что именно.метод switch возвращает только значение по умолчанию

Может ли кто-нибудь сказать мне, где моя ошибка?

var dateSettings = function (value) { 

     var timezone = localStorage.getItem('timezone'); 
     timezone = JSON.parse(timezone); 

     var timeFormat = localStorage.getItem('timeFormat'); 
     timeFormat = JSON.parse(timeFormat); 

     var dateFormat = localStorage.getItem('dateFormat'); 
     dateFormat = JSON.parse(dateFormat); 

     switch(value) { 
      case (timezone === true && timeFormat === true && dateFormat === false): 
       return value = moment.utc(value).format('MMM dd, yyyy HH:mm'); 

      case (timezone === true && timeFormat === false && dateFormat === false): 
       return value = moment.utc(value).format('MMM dd, yyyy HH:mm:ss'); 

      case (timezone === false && timeFormat === false && dateFormat === false): 
       return value = moment(value).format('MMM dd, yyyy HH:mm:ss'); 

      case (timezone === false && timeFormat === false && dateFormat === true): 
       return value = moment(value).format('YYYY-MM-DD HH:mm:ss'); 

      case (timezone === false && timeFormat === true && dateFormat === true): 
       return value = moment(value).format('YYYY-MM-DD HH:mm'); 

      case (timezone === true && timeFormat === false && dateFormat === true): 
       return value = moment.utc(value).format('YYYY-MM-DD HH:mm:ss'); 

      default: 
       return value = moment.utc(value).format('YYYY-MM-DD HH:mm'); 
     } 
    }; 
+0

Не следует использовать переключатель случай как то .... Если вы собираетесь иметь чеки, используйте if/else if/else .... – epascarello

ответ

2

switch-case не то же самое, как if-else заявления - это то, что вы на самом деле нужно использовать.

case должен зависеть только от value.

Посмотрите на это: http://www.w3schools.com/js/js_switch.asp

function switchCase(expression) { 
 

 
    switch(expression) { 
 
     case "a": 
 
      console.log("This is an A"); 
 
      break; 
 
     case "b": 
 
      console.log("This is a B"); 
 
      break; 
 
     default: 
 
      console.log("DEFAULT"); 
 
    } 
 
} 
 

 
switchCase("a") 
 
switchCase("banana")

Также вы возвращаетесь задание return value = ..., которое не является хорошим стилем в моих глазах.

Лучше сделать:

value = 4; 
return value; 

Это ваш образец так, как я хотел бы сделать это:

var dateSettings = function(value) { 

    var timezone = localStorage.getItem('timezone'); 
    timezone = JSON.parse(timezone); 

    var timeFormat = localStorage.getItem('timeFormat'); 
    timeFormat = JSON.parse(timeFormat); 

    var dateFormat = localStorage.getItem('dateFormat'); 
    dateFormat = JSON.parse(dateFormat); 

    if (timezone === true && timeFormat === true && dateFormat === false) { 
     value = moment.utc(value).format('MMM dd, yyyy HH:mm'); 
    } else if (timezone === true && timeFormat === false && dateFormat === false) { 
     value = moment.utc(value).format('MMM dd, yyyy HH:mm:ss'); 
    } else if (timezone === false && timeFormat === false && dateFormat === false) { 
     value = moment(value).format('MMM dd, yyyy HH:mm:ss'); 
    } else if (timezone === false && timeFormat === false && dateFormat === true) { 
     value = moment(value).format('YYYY-MM-DD HH:mm:ss'); 
    } else if (timezone === false && timeFormat === true && dateFormat === true) { 
     value = moment(value).format('YYYY-MM-DD HH:mm'); 
    } else if (timezone === true && timeFormat === false && dateFormat === true) { 
     value = moment.utc(value).format('YYYY-MM-DD HH:mm:ss'); 
    } else { 
     value = moment.utc(value).format('YYYY-MM-DD HH:mm'); 
    } 
    return value; 
}; 
+0

Да, он отлично работает. Я просто подумал, что я могу заменить это заявление на метод переключения – antonyboom

+0

Вы можете. Это немного странно: 'switch (true) {case (test1): expr1; ломать; case (test2): expr2; ломать; ... '. См. Http://stackoverflow.com/questions/14118996/is-switchtrue-valid-javascript –

+0

@ScottSauyet Прохладный, не знал этого - но это не так уж редко. – ppasler

Смежные вопросы