2017-01-09 117 views
1

我想在我的應用程序中處理日期格式的多個條件,併爲此使用切換方法。該功能看起來不錯,但問題是沒有任何從我的病例情況不起作用。我瞭解情況有問題,但不明白究竟是什麼。切換方法只返回默認值

有人能告訴我我的錯誤在哪裏嗎?

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