删除所有路径!= String1或String2

时间:2015-08-05 21:03:20

标签: javascript if-statement photoshop photoshop-script

我不太确定如何用这句话来表达语法。最终,我想删除文档中没有名称Ex1或Ex2或Ex3的所有路径。

这是我到目前为止所拥有的

deletepaths();

function deletepaths() {
    if (!documents.length) return;
    var doc = activeDocument;
    for (var a = doc.pathItems.length - 1; a > -1; a--) {
        if (doc.pathItems[a].name == "Ex1") {
            return true;
        }
        if
        else(doc.pathItems[a].name == "Ex2") {
            return true;
        } else doc.pathItems[a].remove();
    }
}

这是我之前使用的另一个脚本,但不允许我排除多个"路径"名称



#target Photoshop
main();
function main(){
if(!documents.length) return;
var doc = activeDocument;
for(var a = doc.pathItems.length-1;a>-1;a--){
if(doc.pathItems[a].name  != "Ex1") doc.pathItems[a].remove();
    }
}




2 个答案:

答案 0 :(得分:0)

这应该这样做:

function deletepaths() {
    if (!documents.length) return;
    var doc = activeDocument;
    for (var a = doc.pathItems.length - 1; a > -1; a--) {
        if (!doc.pathItems[a].name.match(/^Ex[1-3]$/)) {
            doc.pathItems.splice(a,1);
        }
    }
}

//Testing
var documents = [{}, {}],
    activeDocument = {"pathItems": [{name: "Ex1"}, {name: "Ex2"}, {name: "Someothername"}, {name: "Exasd1"}, {name: "asdEx1"}, {name: "Ex2"}, {name: "Ex3"}, {name: "Ex2"}, {name: "Exasd1"}, {name: "Exasd1"}, ]};
deletepaths();
                                    
var body = document.getElementsByTagName("body")[0];
activeDocument.pathItems.forEach(function(a,b,c){
    body.innerHTML += a.name + "<br>";    
});

答案 1 :(得分:0)

有时,以更易读的方式格式化代码可以帮助诊断问题。

这个函数以稍微不同的方式处理问题 - 我们保留一个我们想要保存的名称数组,如果路径的名称不在该数组中,那么我们调用{{ 1}}就可以了。

我还要返回.remove()(如果绑定到boolean变量的元素不存在),那么该函数会向您提供有用的内容,而不是返回documents

我不熟悉你正在使用的图书馆,但试试这个。我很乐意与您合作以获得解决方案,只需对此答案发表评论。

使用此功能:

undefined

工作示例:

http://codepen.io/bddenhartog/pen/VLReKa
请注意,笔中的代码已经过修改以适应示例。