抓取json对象数组的最佳方式

时间:2017-06-26 23:25:17

标签: javascript node.js

我有一个包含~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功能?

2 个答案:

答案 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>