2017-02-16 7 views
1

言語の省略形を使用し、.constantディクショナリを使用して一致させるメソッドがあり、一致する言語名を返します。JavaScriptで.filterを使用して渡された値を評価する

.filterで評価して、渡されたisoCode /言語の略語が存在するかどうかを確認するにはどうすればよいですか?ここで

は私の方法である:

angular.module('portalDashboardApp') 

    .service('ISOtoLanguageService', ['Languages', function(Languages) { 

    this.returnLanguage = function(isoCode) { 

     var categoryObject = Languages.filter(function (categoryObject) { 
      if (isoCode != null || isoCode != undefined) { 
       return categoryObject.code === isoCode; 
      } 
      else { 
       return categoryObject.code === 'und'; 
      }   
     })[0]; 

     if (categoryObject.name != undefined || categoryObject.name != null) { 
      return categoryObject.name; 
     } 
     else { 
      return "undefined"; 
     } 
    }; 
    }]); 

ありがとうございました。ここで

angular.module('portalDashboardApp') 

    .service('ISOtoLanguageService', ['Languages', function(Languages) { 

    this.returnLanguage = function(isoCode) { 

     var categoryObject = Languages.filter(function (categoryObject) { 
     return categoryObject.code === isoCode; 
     })[0]; 

     return categoryObject.name; 

    }; 

    }]); 

は、いくつかのエラーは、私が試してみました引くと方法です!

+0

)私はそれはあなたを助け願っていif (result === undefined) ...

で、この関数の結果をチェックする必要があります外に 'Languages'はあなたのサービス-辞書や任意の外部にありますか? – Antonio

+1

オフトピック:JavaScriptでは "isoCode!= undefined"と "isoCode!= null"のどちらもまったく同じです。だからあなたはそれらの1つを落とすことは安全です。これは!=でしか動作しません!== –

+0

@Antonio内部の定数辞書です。 – onmyway

答えて

1

オブジェクトまたはマップでLanguagesにデータを整理することをお勧めします。翻訳を略語で取得すると、はるかに簡単になります。短い例:

angular.module('portalDashboardApp') 
    .factory('Languages', function(){ 
    var dictionary = { 
     ISO: {name: 'International Organization for Standardization'} 
    }; 
    return { 
     get: function(abbr){ 
      return dict[abbr]; 
     } 
    }; 
    }).service('ISOtoLanguageService', ['Languages', function(Languages) { 
    this.returnLanguage = function(isoCode) { 
     if(!isoCode) { 
     return "Answer for empty isoCode"; 
     } 
     var categoryObject = Languages.get(isoCode); 
     return (categoryObject || {}).name || "I don't know this abbr"; 
    }; 

}]); 

私はこれが(私はそれを起動しようとしていませんでした)任意の構文エラーなしで作品をJSことはよく分からないが、アイデアは、あなたは大きな辞書や上のアレイとfilterを必要としないということです巨大な辞書であっても、O(1)の複雑さを持つdictから任意の省略形を得ることができます。 isoCodeは、ヌル未定義または空の文字列であるか、このキーがで見つかっていない場合この場合

angular.module('portalDashboardApp') 

    .service('ISOtoLanguageService', ['Languages', function(Languages) { 

    this.returnLanguage = function(isoCode) { 
     if (!isoCode) { 
      return; 
     } 

     var resultAbbrs = Languages.filter(function (categoryObject) { 
      return categoryObject.code === isoCode; 
     }); 

     if (resultAbbrs.length > 0) { 
      return resultAbbrs[0].name; 
     } 
    }; 
    }]); 

:あなたはあなたのコードをリファクタリングをしたくない場合は

あなたはこのような何かを行うことができます辞書return undefinedがデフォルトで使用されます。あなたは

+0

入力していただきありがとうございます、フィードバックと素晴らしい提案。しかし、私のコードを '.filter'で評価する方法はおそらくありますか? – onmyway

+0

@onmyway私は私の答えを変更しました。それを試してください。 – Antonio

+0

ありがとう、魅力のように動作します。また、FYIだけです。私は自分の言語辞書を.constant辞書として設定していますが、上記のような方法を使って、1000レコードのファイルをcsvにエクスポートし、言語変換などを行います。 – onmyway

関連する問題