我有一系列版本:
var versions = ['xs', 'sm', 'md', 'lg', 'thumbnail'];
我希望获得存储在此数组中的所有图像,这些图像不包含任何这些后缀。以下是图像数组的示例:
{
"files": [
"/public/uploads/contentitems/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0_1.png",
"/public/uploads/contentitems/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0_1_xs.png",
"/public/uploads/contentitems/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0_1_sm.png",
"/public/uploads/contentitems/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0_1_md.png",
"/public/uploads/contentitems/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0_1_lg.png",
"/public/uploads/contentitems/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0_1_thumbnail.png"
]
}
我只想要第一个项目,但是,我使用当前代码获取所有这些项目:
fs.stat(file, function(err, stat) {
if (stat && stat.isDirectory()) {
// perform directory code here
} else {
versions.forEach(function(version) {
if (file.indexOf(version) != -1) {
results.push(file);
}
});
}
});
答案 0 :(得分:1)
以下是我将如何做到这一点:
1)取文件的后缀。我采用的定义是'和_之间的非数字字符串。在文件格式的3个字母之前。'您可能需要另一个定义或进行一些检查 但我认为,如果文件名的其他部分包含匹配的字符串,那么手头的后缀可以避免意外,这是一个良好的开端。
// provides lower case suffix of the file, or null if none found.
function getSuffix (s) {
var res = /_([a-zA-Z]+)\.\w{3}$/g.exec(s) ;
if (!res) return null;
return res[1].toLowerCase();
}
2)写下这样的可用格式:
var version = { xs : true, sm : true, md : true, lg : true, thumbnail : true } ;
3)然后检查完成:
var suffix = getSuffix(fileName) ;
if (version[suffix]) /* do something */
(请注意,通过这种方式,您可以轻松地将函数与格式相关联:
var versionProcessors = { xs : function(fileBuffer) { /* process a xs buffer */ },
sm : function(fileBuffer) ...,
. .. } ;
// ... later ....
var suffix = getSuffix(fileName) ;
var processor = versionProcessors[suffix];
if (processor) {
getFileBuffer(fileName, processor);
}
)
答案 1 :(得分:0)
我相信你想要这个:
if (file.indexOf(version) == -1) {
results.push(file);
}
如果文件名包含后缀,file.indexOf(version)
将返回索引> -1,所以你不想将它添加到结果中。但是,如果文件名不包含后缀,则该行将返回-1。
答案 2 :(得分:0)
我将如何做到这一点:
var versions = ['xs', 'sm', 'md', 'lg', 'thumbnail'];
results=[];
files=[
"/public/uploads/contentitems/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0_1.png",
"/public/uploads/contentitems/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0_1_xs.png",
"/public/uploads/contentitems/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0_1_sm.png",
"/public/uploads/contentitems/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0_1_md.png",
"/public/uploads/contentitems/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0_1_lg.png",
"/public/uploads/contentitems/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0_1_thumbnail.png"
]
files.forEach(function (file){
//start checking
findany=false;
versions.forEach(function(version) {
if (file.indexOf(version) != -1) findany=true;
});
if(!findany) results.push(file);
//end checking
})
输出
> results
[ '/public/uploads/contentitems/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0_1.png' ]