javascript - 提醒用户 Extendscript 中数组之外的项目

标签 javascript arrays photoshop extendscript

我有一个脚本,用于检查文件夹中是否存在数组中包含的特定格式的图像文件。

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

  1. 他们选择的文件夹包含未包含在数组中的任何文件类型(非法文件类型)。

  2. 他们选择的文件夹包含数组中包含的多种文件类型(混合合法文件类型)。

  • 他们选择的文件夹包含不在数组中的任何文件类型以及数组中的文件类型(非法和合法文件类型的混合)。
  • 下面是检查文件夹中某些文件类型的代码。

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

    关于javascript - 提醒用户 Extendscript 中数组之外的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37973010/

    相关文章:

    php - 换行会导致代码中断

    javascript - 带有空格的 Axios GET 请求参数

    javascript - 如何检查 Jquery 数据是 JSON 格式还是简单的 HTML 格式?

    javascript - 如何在 JavaScript 中合并两个数组并删除重复项

    java - 创建一个最多包含 100 个值的 java 列表

    javascript - 在 Photoshop 脚本中替换图层图像

    javascript - 我如何获得文本区域的高度

    javascript - Angular 从文字数组获取数据

    photoshop - 我如何开始网页设计的图形设计方面?

    c++ - Photoshop SDK : Export plugin for Layer Comps