ExtendScript 多个条件切换

ExtendScript multiple conditions in switch

我有一个 switch() 需要包含多个条件才能为真。
在线社区告诉我应该将它们分为两种情况然后定义它。像这样:

function changeGrep(searchFor){
app.findGrepPreferences.findWhat = searchFor;
var myFound = myDoc.findGrep();
for(i=0; i<myFound.length; i++){
    switch(searchFor){
        case "^201\d$":
        case myFound[i].parent.fillColor == app.activeDocument.swatches.item(14):
            myFound[i].parent.fillColor = app.activeDocument.swatches.item(3);
            break;

        case "^-?\+?\(?((\d+,)?(\d+,)?(\d+)(\.\d+)?%?\)?)$":
        case myFound[i].parent.fillColor == app.activeDocument.swatches.item(14):
            myFound[i].parent.fillColor = app.activeDocument.swatches.item(4);
            break;

        }
    }
}

changeGrep("^-?\+?\(?((\d+,)?(\d+,)?(\d+)(\.\d+)?%?\)?)$");
changeGrep("^201\d$");

为了完整起见,首先将整个 table 置于红色 (14) 中。如果两个条件都成立,它应该改变颜色。但是它不关心第二个 case.

关于如何在 extendscript 中执行此操作的任何想法?

您可以将其作为 vanilla JS 解决方案进行尝试。将 true 传递给 switch 语句,然后每个 case 可以包含一个条件。

switch (true) {
  case (<condition> && <condition>):
    // do something
    break;
  case (searchFor === '^201\d$'):
    // do other thing
    break;
  case ((searchFor === '^201\d$') && (myFound[i].parent.fillColor == app.activeDocument.swatches.item(14)):
    // code
    break;
}

我认为如果您跳过 switch 语句,这可能会更简洁(也更快)。

我会先弄清楚你的替换样本是什么,然后在循环中你只需要弄清楚父对象是否有正确的替换样本,如果是这样,用替换样本替换.

function changeGrep(searchFor){
  app.findGrepPreferences.findWhat = searchFor;
  var myFound = myDoc.findGrep();

  var myReplaceSwatch;
  if(searchFor === "^201\d$") {
    myReplaceSwatch = app.activeDocument.swatches.item(3);
  } else if (searchFor === "^-?\+?\(?((\d+,)?(\d+,)?(\d+)(\.\d+)?%?\)?)$") {
    myReplaceSwatch = app.activeDocument.swatches.item(4);
  }

  for (var i = 0; i < myFound.length; i++) {
    if(myReplaceSwatch && myFound[i].parent.fillColor === app.activeDocument.swatches.item(14) {
      myFound[i].parent.fillColor = myReplaceSwatch;
    }
  }
}

changeGrep("^-?\+?\(?((\d+,)?(\d+,)?(\d+)(\.\d+)?%?\)?)$");
changeGrep("^201\d$");

或者,为了进一步简化,您也可以将样本的索引也传递给函数:

function changeGrep(searchFor, swatchIndex){
  app.findGrepPreferences.findWhat = searchFor;
  var myFound = myDoc.findGrep();

  var myReplaceSwatch = app.activeDocument.swatches.item(swatchIndex);

  for (var i = 0; i < myFound.length; i++) {
    if(myReplaceSwatch && myFound[i].parent.fillColor === app.activeDocument.swatches.item(14) {
      myFound[i].parent.fillColor = myReplaceSwatch;
    }
  }
}

changeGrep("^-?\+?\(?((\d+,)?(\d+,)?(\d+)(\.\d+)?%?\)?)$", 4);
changeGrep("^201\d$", 3);