2016-09-17 2 views
0

최근에 저는 리팩토링 코드에 대해 배우기 시작했습니다. 이 코드를 어떻게 리팩토링 할 수 있습니까? 어디에서 시작할 수 있습니까?이 코드를 리팩토링하는 방법은 무엇입니까?

var activeNumber = [ 
    { name: 'no 1' }, 
    { name: 'no 2' }, 
    { name: 'no 11' }, 
    { name: 'no 3' }, 
    { name: 'no 10' } 
]; 

var numberRe = new RegExp('\\d+'); 

var getCustomNumber = function() { 
    var top = 0; 
    for (var i = 0; i < activeNumber.length; i++) { 
     var present = numberRe.exec(activeNumber[i].name); 
     if (present) { 
      var neno = parseInt(present[0]); 
      if (!isNaN(neno) && neno > top) { 
       top = neno; 
      } 
     } 
    } 
    return top; 
}; 

답변

0

당신이 객체 목록 중 name 건물 내에서 최대 (최고) 번호를 찾기 위해 노력하고있는 것으로 보인다.

var activeNumber = [ 
 
    {name: 'no 1'}, 
 
    {name: 'no 2'}, 
 
    {name: 'no 11'}, 
 
    {name: 'no 3'}, 
 
    {name: 'no 10'} 
 
]; 
 

 
var getMaxNumber = function(arr) { 
 
    var top = 0, items = []; 
 
    if (Array.isArray(arr) && arr.length === 0) return top; 
 

 
    arr.forEach(function(o) { 
 
    num = o.name.match(/\d+/); // finds matches for a number in 'name' property 
 
    if (num) items.push(num); 
 
    }); 
 

 
    return Math.max.apply(null, items); // gets the maximum value of the list 
 
} 
 

 
console.log(getMaxNumber(activeNumber));

0
var getCustomerNumber = function (custNumber) { 
    var present = numberRe.exec(custNumber); 
    if (present) { 
     return parseInt(present[0]); 
    } 
    return -1; 
}; 

var getAllCustomerNumbers = function (customers) { 
    var top = 0; 
    for (var i = 0; i < customers.length; i++) { 
     var neno = getCustomerNumber(customers[i].name); 
     if (!isNaN(neno) && neno > top) { 
      top = neno; 
     } 
    } 
    return top; 
}; 

내가 어떤 실수를하지 않은 희망 : 다음과 같은 최적화 된 접근 방식을 사용
.

간단한 규칙은 한 가지 일을하는 코드 조각을 만드는 것입니다. 위의 예에서 하나의 함수는 문자열에서 정규 표현식, 즉 getCustomerNumber으로 숫자를 추출하고 다른 숫자는 여러 고객을 대상으로 반복하여 숫자를 추출합니다.

또한이 경우 customers 또는 custNumber의 모든 종속성 함수의 인수로 전달하는 것이 유용합니다. 그 이유는 코드를 테스트 할 수있게 만들 수 있기 때문입니다 (특히 단위 테스트 가능). 운영.