2017-03-29 24 views
0

if else条件があります。ファイルをアップロードすると、ファイル名に 'code name'すなわち 'abc1'が表示され、それをハードと比較します戻り値はProductLineと比較されます。ここで私は双方向の検索をしています。もし私がファイルをアップロードしてそれをproductLineと比較し、それを返すようなものならば、これらすべてを取り除き、それをまっすぐにする方法。以下はコードです。JavaScriptを静的から動的に変更する場合

var findProductLineByFilename = function(filename, productLines) { 
    filename = filename.replace(/(|\-|\.|_)/g, ''); 
    var i; 
    for (i in productLines) { 
     productLine = productLines[i]; 

     // XXX: Hard-code names 
     if (productLine.code_name === 'abc1') { 
      if (filename.search(/(war1)|(w1)|(abc1)/) >= 0) { 
       return productLine; 
      } 
     } else if (productLine.code_name == 'abc2') { 
      if (filename.search(/(w2)|(abc2)/) >= 0) { 
       return productLine; 
      } 
     } else if (productLine.code_name == 'abc3') { 
      if (filename.search(/(w3)|(abc3)/) >= 0) { 
       return productLine; 
      } 
     } else if (productLine.code_name == 'abc4') { 
      if (filename.search(/(w4)|(abc4)/) >= 0) { 
       return productLine; 
      } 
     } else if (productLine.code_name == 'abc5') { 
      if (filename.search(/(w5)|(abc5)/) >= 0) { 
       return productLine; 
      } 
     } 
    } 
    return null; 
}; 
+0

代わりはどこから来ましたか? 'abcN'はコードネームから来ていますが、' wN'部分はどうですか? –

答えて

1

オブジェクトを使用して、コード名を正規表現にマップします。

var findProductLineByFilename = function(filename, productLines) { 
    filename = filename.replace(/(|\-|\.|_)/g, ''); 
    var map = { 
     'abc1': /(war1)|(w1)|(abc1)/, 
     'abc2': //(w2)|(abc2)/, 
     ... 
    }; 
    var i; 
    for (var i = 0; i < productLines.length; i++) { 
     productLine = productLines[i]; 
     if (productLine.code_name in map && map[productLine.code_name].test(filename)) { 
      return productLine; 
     } 
    } 
    return null; 
}; 
+0

私がここで試しているのは、ハードコーディングを取り除くことです。私はマップにオブジェクトを使用することはまだハードコーディングであることを意味します。 productLineは製品リストから直接入手する必要があります –

+0

これを行う方法はわかりません。 'code_name == 'acb1''はファイル名に' war1'、 'w1'、' acb1'に関連していますが、 'code_name =' acb2''は' w2'にのみ関連しています。 'acb2'。すべてのテストに共通のパターンはないようです。 – Barmar

+0

「製品リストから直接来た」ということはどういう意味かわかりません。製品リストは何ですか? – Barmar

関連する問題