繁体   English   中英

爬取JSON对象数组的最有效方式

[英]Most performant way to crawl json object array

我有一个列表,列出了〜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函数?

这是我的操作方法-一次“预处理” iconMap,创建一个对象,该对象使用icon的值来extension

 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')); 

如果可以使用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> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM