2013-12-10 3 views
0

저는 프로그래밍에있어별로 도움이되지는 않지만 항상 최선을 다합니다. follwong 코드에서 많은 반복을 볼 수 있습니다. 나는 그것을 단축하려고 노력했지만, 나는 그것이 매우 추악하게 남아 있다고 생각한다.반복 횟수가 많은 짧은 코드

반복 횟수를 줄이려면 어떻게 개선 할 수 있습니까? 당신이 조회를 사용할 수

var values = ["A", "B", "T", "D", "DD"]; 
for(var i = 0; i < values.length; i++) { 
    var len = values[i].length + 1; 
    if(q.substr(0, len) == values[i] + ";"){ 
     $("#imagedocu_art").val(values[i]); 
     $("#imagedocu_text").val(q.substr(len)); 
     $("#new_imagedocu").submit(); 
     break; 
    } 
} 

또는 :

$("#searchterm").keyup(function(e){ 
    var q = $("#searchterm").val(); 

    if(e.keyCode==13){ 
     if(q.substr(0,2) == "A;"){ 
      $("#imagedocu_art").val("A"); 
      $("#imagedocu_text").val(q.substr(2)) 
      $("#new_imagedocu").submit();   
     } 
     if(q.substr(0,2) == "B;"){ 
      $("#imagedocu_art").val("B"); 
      $("#imagedocu_text").val(q.substr(2)) 
      $("#new_imagedocu").submit();   
     } 
     if(q.substr(0,2) == "T;"){ 
      $("#imagedocu_art").val("T"); 
      $("#imagedocu_text").val(q.substr(2)) 
      $("#new_imagedocu").submit();   
     } 
     if(q.substr(0,2) == "D;"){ 
      $("#imagedocu_art").val("D"); 
      $("#imagedocu_text").val(q.substr(2)) 
      $("#new_imagedocu").submit();   
     } 
     if(q.substr(0,3) == "DD;"){ 
      $("#imagedocu_art").val("DD"); 
      $("#imagedocu_text").val(q.substr(3)) 
      $("#new_imagedocu").submit();   
     } 
    } 


    if((q.substr(0,2) == "D;") || (q.substr(0,3) == "DD;")){ 
    if(q.substr(0,2) == "D;"){ 
     var text = q.substr(2); 
    }else{ 
     var text = q.substr(3); 
    } 
+0

집니다. 추가 세부 사항을 추가하는 것이 좋습니다. 'q '에 대한 기대 값은 무엇인가? 특정 형식을 가지고있는 것처럼 보입니다. 세미콜론 다음에 2 또는 3자를 입력하고 imagedocu_text 입력에 더 많은 문자를 입력하십시오. 그러나 q에 대한 값은 열거되어 있습니까? 이 코드의 요구 사항은 무엇입니까? – codefactor

+0

좋아, requierement는 입력 값을 확인하고 나중에 값을 수정하는 것입니다! 그러나 이것은 단편 일뿐입니다! 덕분에 –

답변

2

당신은 이런 일에 첫 번째 if 블록을 대체 할 수

var values = { A: 1, B: 1, T: 1, D: 1, DD: 1 }; 
var parts = q.split(/;(.*)/, 2); 
if(parts[0] in values){ 
    $("#imagedocu_art").val(parts[0]); 
    $("#imagedocu_text").val(parts[1]); 
    $("#new_imagedocu").submit(); 
} 

실제로 전체 방법은 무엇인가로 대체 될 수 이렇게 :

var q = $("#searchterm").val(); 
var values = { A: false, B: false, T: false, D: true, DD: true }; 

var parts = q.split(/;(.*)/, 2); 

if(e.keyCode==13){ 
    if(parts[0] in values){ 
     $("#imagedocu_art").val(parts[0]); 
     $("#imagedocu_text").val(parts[1]); 
     $("#new_imagedocu").submit(); 
    } 
} 

if(parts[0] in values && values[parts[0]]){ 
    var text = parts[1]; 
} 
+0

두 번째 코드에는'q.split (";", 2);'가 있지만'DD'로이 작업을 수행합니까? 감사합니다 –

+0

@ 존 스미스 예, 그렇습니다. –

+1

@ JohnSmith 실은 방금 내가 깨달은 것, 당신이 염려하는 문자열의 첫 번째 부분 뒤에';'을 쓰면 아마도'q.split (/;(.*)/, 2)'를 사용해야 할 것입니다. 그에 따라 내 대답을 업데이트했습니다. –

4

정규 표현식은 모든 if 점검을 대체 할 수 있습니다.

if (e.keyCode==13) { 
    var match = q.match(/^([ABTD]|DD);(.*)/); 
    if (match) { 
     $("#imagedocu_art").val(match[1]); 
     $("#imagedocu_text").val(match[2]); 
     $("#new_imagedocu").submit();   
    } 
} 

등록 특급

/  Start of reg exp 
^  Start of string 
(  Start of capture group 
[ABTD] Match any character included inside the [] 
|  OR 
DD  Match the String "DD" 
)  End of capture group 
;  Match a semicolon 
(.*) Match all the remaining 
/  End of Reg Exp 

의 기본 설명이 경기는이 스타일의 모든 문제입니다

null or ["A;FOO", "A", "FOO"] or ["DD;FOO", "D", "FOO"] 
+1

#imagedocu_text의 값은 세미콜론 뒤에 q의 부분 문자열 일 필요가 있다고 생각하면'/^([ABTD] | DD); (. *) $ /'를 고려한 다음 값에 match [2] 이 텍스트의. – codefactor

+0

아, 원래 코드를 잘못 읽었습니다! 변화를 만들었습니다! – epascarello

관련 문제