我有一个脚本,用于检查文件夹中数组中包含的某些格式的图像文件。

我需要能够在以下情况下提醒用户:


他们选择的文件夹包含数组中未包含的任何文件类型(非法文件类型)。
他们选择的文件夹包含数组中包含的一种以上文件类型(混合法律文件类型)。


要么


他们选择的文件夹包含数组中未包含的任何文件类型以及数组中的文件类型(非法和合法文件类型的混合)。


这是通过文件夹检查某些文件类型的代码。

var DARKfileList = [], FILE_TYPE, FTlen, i, SEARCH_MASK;
FILE_TYPE = ["orf", "tif", "tiff", "jpg", "jpeg"];
FTlen = FILE_TYPE.length;
for (i = 0; i < FTlen; i++) {
    SEARCH_MASK = "*." + FILE_TYPE[i];
    DARKfileList = DARKfileList.concat(DARKinputFolder.getFiles(SEARCH_MASK));
}
alert('found: ' + DARKfileList.length + ' files');


目前,我已经达到了第1部分的要求,但这很混乱,因为它只是检查DARKfileList是否为空。我可以用它来提醒用户他们选择的文件夹为空,但是我更希望单独检查“非法文件类型”
这是对空列表的检查:

if (DARKfileList.length == 0)
{
    alert('Folder does not contain allowed file types!','DARK FRAME folder error');
}


问候..,

最佳答案

您可能应该稍微改变一下架构。

您需要遍历文件并按扩展名对它们进行排序,然后根据需要警告消息。

首先添加Array.includes polyfill:

Array.prototype.includes = function(searchElement, fromIndex) {
    var O = Object(this);
    var len = parseInt(O.length) || 0;
    if (len === 0) {
        return false;
    }
    var n = parseInt(arguments[1]) || 0;
    var k;
    if (n >= 0) {
        k = n;
    } else {
        k = len + n;
        if (k < 0) {
            k = 0;
        }
    }
    var currentElement;
    while (k < len) {
        currentElement = O[k];
        if (searchElement === currentElement ||
                (searchElement !== searchElement && currentElement !== currentElement)) {
            return true;
        }
        k++;
    }
    return false;
};


现在创建一个对象来存储允许的文件:

var DARKfileList = {
    "orf": [],
    "tif": [],
    "tiff": [],
    "jpg": [],
    "jpeg": []
};


循环浏览DARKinputFolder中的文件,并对它们进行排序:

var files = DARKinputFolder.getFiles();
var extension;
var illegal = [];
var illegalTypes = [];
for (var i = 0; i < files.length; i++) {
    extension = files[i].split('.').pop();
    if (DARKfileList.hasOwnProperty(extension)) {
        DARKfileList[extension].push(files[i]);
        continue;
    }
    if (!illegalTypes.includes(extension)) {
        illegalTypes.push(extension);
    }
    illegal.push(files[0]);
}


现在获取要显示的有关合法文件的数据,并将它们合并为一个数组:

var totalLegalFiles = [];
var foundLegalTypes = [];
for (var key in DARKfileList) {
    if (!DARKfileList.hasOwnProperty(key)) {
        continue;
    }
    totalLegalFiles = totalLegalFiles.concat(DARKfileList[key]);
    if (DARKfileList[key].length !== 0) {
        foundLegalTypes.push(key);
    }
}


最后,您可以根据需要显示以下消息:

alert('found: ' + totalLegalFiles.length + ' legal files');
alert('found legal types: ' + foundLegalTypes.join(', '));
alert('found: ' + illegal.length + ' illegal files');
alert('fount illegal files: ' + illegalTypes.join(', '));

09-25 19:29