2016-09-17 46 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财产MAX(最高)数。
使用以下方法优化:

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,另一个函数是迭代许多客户并提取他们的数字。

此外,通过为您的功能,所有的依赖关系的争论在这种情况下customerscustNumber是有用的,其原因是,你可以让你的代码可测试(特别是单元测试),因为你通过一切,它需要跑。