在JavaScript中使用.filter计算传递的值

在JavaScript中使用.filter计算传递的值,javascript,angularjs,Javascript,Angularjs,我有一个方法,它使用.constant字典来匹配语言缩写,并返回匹配的语言名称 如何使用.filter进行评估,以检查传递的等码/语言缩写是否存在 这是我的方法: angular.module('portalDashboardApp') .service('ISOtoLanguageService', ['Languages', function(Languages) { this.returnLanguage = function(isoCode) { var c

我有一个方法,它使用
.constant
字典来匹配语言缩写,并返回匹配的语言名称

如何使用
.filter
进行评估,以检查传递的等码/语言缩写是否存在

这是我的方法:

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;

    };

  }]);
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;

    };

  }]);
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')
  .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是否没有语法错误(我没有试着启动它),但我的想法是,在大型字典上,您不需要数组和
过滤器
,即使使用大型字典,您也可以从dict获得O(1)复杂度的任何缩写

如果您不想对代码进行重构,可以这样做:

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;
        }
    };
  }]);
在这种情况下,如果
isoCode
为空,默认情况下,未定义或空字符串或字典中未找到此键
return undefined
。在外部,您应该使用
if(result==undefined)检查此函数的结果。


我希望它能帮助您)

语言
是您的服务字典还是任何外部的?离题:在JavaScript中,“isoCode!=undefined”和“isoCode!=null”的作用完全相同。所以你可以安全地放下其中一个。这只适用于!=而不是和你==@安东尼奥:这是一本内部的。经常使用的字典。谢谢你的输入和反馈以及很好的建议。但是有没有什么方法可以让我用我的代码对
.filter
进行评估?@onmyway我改变了我的答案,请尝试一下,谢谢,效果很好。此外,仅供参考;虽然我将语言词典设置为.constant dictionary,并使用如上所示的方法,但要将包含1000条记录的文件导出到csv,进行语言转换和其他工作只需几秒钟。