2016-09-17 7 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; 
}; 


には、以下の最適化されたアプローチを使用してください。

単純なルールは、1つのことだけを行うコードを作成することです。上記の例では、文字列から正規表現、すなわちgetCustomerNumberで番号を抽出する機能と、多数の顧客を繰り返して番号を抽出する機能があります。

customersまたはcustNumberのすべての依存関係の引数を関数の引数として渡すと便利です。なぜなら、必要なものすべてを渡すので、コードをテスト可能(特にユニットテスト可能)にすることができるからです。走る

関連する問題