2013-07-04 6 views
0

У меня есть JS функция, которая выбирает номер отчета из умножения параметров (2 флажков, 3 выпадающих полей), и я получил очень большое условие о как этогоJavaScript Multiply оператор условия

switch(ReportNumDrop) 
    { 
     case 0: NumberReport = IsDropDownValue == 0 ? 1034: 1033; 
     break; 

     case 1: if(CheckBoxChecked) 
       { 
        NumberReport = IsDropDownValue == 0 ? 1022: 1021; 

       } 
       else 
       { 
       NumberReport = IsDropDownValue == 0 ? 1011: 1012; 
       } 
       break; 
      .... 
      //SimilarStatement with another rep number 
      .... 
      case 6: if(DropDownCondition2) 
        { 
         NumberReport = SecondDropDownValue == '*' ? 1045: 1044; 
        } 
        else 
        { 
        NumberReport = ThirdDropDownValue == 0 ? 1055: 1054; 
        } 
      break; 
      default: break; 
      } 

Итак, это как граф конечного состояния, но какой самый простой способ реорганизовать это, чтобы его можно было прочитать без крови из глаз.

(я думаю, что это похоже на команду формы шаблона GOF)

Кроме того, код не мой

PS C# может быть использован для формирования этого числа с помощью асинхронного вызова

+0

Misprinted in 6 case, есть другие элементы управления – user1734493

ответ

0

что-то вроде этого, может быть, ?

var fs = [ 
    [function() { ReportNumDrop == 0 && IsDropDownValue == 0 }, 1034], 
    [function() { ReportNumDrop == 0 && IsDropDownValue != 0 }, 1033], 
    ... 
]; 

затем перебрать этот массив, чтобы найти элемент, который имеет функцию, которая возвращает true.

+0

Куда будет много copypaste cos при использовании условий с одним, где один параметр отличается – user1734493

+0

DFAs? вы можете реализовать DFA, если вам это не нравится. имеют состояние и переходы определяются как функции, аналогичные приведенным выше. в этом случае у вас будет меньше повторений. но стоит ли это? – akonsu

+0

не какой-то велосипед? – user1734493