我有一个包含~1000个可能的文件扩展名的列表,它是别名。结构如下所示:
var iconMap = [
{ icon: 'photoshop', extensions: ['psd'], format: 'svg' },
{ icon: 'photoshop2', extensions: ['psd'], format: 'svg', disabled: true },
{ icon: 'php', extensions: ['php1', 'php2', 'php3', 'php4', 'php5', 'php6', 'phps', 'phpsa', 'phpt', 'phtml', 'phar'], format: 'svg' }]
我想获得相应扩展名的'icon'属性。因此,我想创建一个应该返回的getExtensionIcon(fileExtension)
函数:
var phpIcon = getExtensionIcon('php') // 'php'
var pharIcon = getExtensionIcon('phar') // 'php'
var php5Icon = getExtensionIcon('php5') // 'php'
我的问题:
我只有一些非常无效的想法,所以我很想知道如何实现getExtensionicon功能?
答案 0 :(得分:1)
以下是我将如何做到这一点 - 这会“预处理”iconMap一次,创建一个对象extension
,其值为icon
var iconMap = [
{ icon: 'photoshop', extensions: ['psd'], format: 'svg' },
{ icon: 'photoshop2', extensions: ['psd'], format: 'svg', disabled: true },
{ icon: 'php', extensions: ['php1', 'php2', 'php3', 'php4', 'php5', 'php6', 'phps', 'phpsa', 'phpt', 'phtml', 'phar'], format: 'svg' }
];
var getExtensionIcon = (src => {
var extensions = src.filter(item => !item.disabled).reduce((result, item) => {
item.extensions.forEach(ext => {
result[ext] = item.icon;
});
return result;
}, {});
return ext => extensions[ext];
})(iconMap);
console.log('psd is', getExtensionIcon('psd'));
console.log('php1 is', getExtensionIcon('php1'));
答案 1 :(得分:0)
如果您可以使用jQuery,它具有$.grep()
功能,似乎非常适合此目的:
function getExtensionIcon(arr, lang){
var result = $.grep(arr, function(e){ return e.extensions.indexOf(lang) != -1; });
return result[0].icon;
}
我真的不知道这是多么高效,但你至少应该尝试一下;)
使用您的示例进行测试:
function getExtensionIcon(arr, lang){
var result = $.grep(arr, function(e){ return e.extensions.indexOf(lang) != -1; });
return result[0].icon;
}
var iconMap = [
{ icon: 'photoshop', extensions: ['psd'], format: 'svg' },
{ icon: 'photoshop2', extensions: ['psd'], format: 'svg', disabled: true },
{ icon: 'php', extensions: ['php1', 'php2', 'php3', 'php4', 'php5', 'php6', 'phps', 'phpsa', 'phpt', 'phtml', 'phar'], format: 'svg' }];
console.log(getExtensionIcon(iconMap, "php6"));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>