我有一个方法,它使用语言缩写并使用.constant
字典匹配它,并返回匹配的语言名称。
如何使用.filter
进行评估以检查传递的isoCode /语言缩写是否存在?
以下是我的方法:
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";
}
};
}]);
谢谢!
答案 0 :(得分: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
在大词典上你能够从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
为null,则未定义或空字符串或在字典return undefined
中找不到此键将默认为。在外面你应该用if (result === undefined) ...
我希望它能帮助你)