在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,进行语言转换和其他工作只需几秒钟。