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);
我有一个 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);