Javascript 自动递增代码不起作用
Javascript Auto Increment Code not working
我需要生成 1000 张图像,每张图像的编号都不同。这样做是在网上找到一个脚本可以正常工作,但它不适用于增量前面的 00。
我不能只在每个数字前面加上 00,因为当它达到 10 时,它会执行 0010 而不是我想要的 010。
这意味着我需要稍微更改一下代码。它可能真的很基本,但我就是想不通。可惜没有日志,因为我是运行Photoshop中的脚本
这是我遇到问题的代码。下面是结果:
for (var i=1; i <= numImages; i++) {
if(layer.textItem.contents < 10) {
layer.textItem.contents = "00" + i.toString();
} else if(layer.textItem.contents >= 10) {
layer.textItem.contents = "0" + i.toString();
} else {
layer.textItem.contents = i.toString();
}
SavePNG(directory + imageName + '_'+ i +'.png');
};
非常感谢任何帮助!我不需要用勺子喂食!我需要从错误中吸取教训!
这是脚本中的全部代码(忘记添加了,后来编辑了)
var imageName = 'Oppmoteskjema';
var numImages = 15;
function SavePNG(saveFile){
var pngOpts = new ExportOptionsSaveForWeb;
pngOpts.format = SaveDocumentType.PNG
pngOpts.PNG8 = false;
pngOpts.transparency = false;
pngOpts.interlaced = false;
pngOpts.quality = 10;
activeDocument.exportDocument(new File(saveFile),ExportType.SAVEFORWEB,pngOpts);
}
var layer = activeDocument.layers[0];
if (layer.kind == 'LayerKind.TEXT') {
for (var i=1; i <= numImages; i++) {
layer.textItem.contents = i.toString();
var str = "" + i;
var pad = "000";
var ans = pad.substring(0, pad.length - str.length) + str;
SavePNG(directory + imageName + '_'+ ans +'.png');
}
};```
您可以将数字添加到一串零中,然后根据所需长度对结果字符串进行切片:
var template = "0000";
var num = 0;
var targetNumber = 1000;
for(let i = 0; i <= targetNumber; i++) {
// add i to the template. Javascript will automatically to this type-coerceon since we're adding string + number
let numStr = template + i;
// strip leading zeroes to match the template length
numStr = numStr.slice(numStr.length - template.length);
console.log(numStr);
}
你可以这样试试:
for (var i=1; i <= numImages; i++) {
var str = "" + i;
var pad = "000";
var ans = pad.substring(0, pad.length - str.length) + str;
layer.textItem.contents = ans;
SavePNG(directory + imageName + '_'+ ans +'.png');
};
您可以根据需要更改垫模板。其输出将是:
1 -> 001
97 -> 097
999 -> 999
1234 -> 1234
如果您只是想根据循环索引操作变量,那么下面的内容就足够了。
for (var i = 1; i <= 1000; i++) {
// Result will be '00' | '0' | ''
const result = i < 10 ? '00' : i < 100 ? '0' : '';
// The result is prepended to the current index
// Aka (001, 010, 100)
const contents = result + i;
// Set the text item object contents to value of contents
layer.textItem.contents = contents;
// Saves the Image
SavePNG(directory + imageName + '_' + contents + '.png');
}
这个
i < 10 ? '00' : i < 100 ? '0' : ''
顺便说一下,它是一个三元运算符,它本质上是一个 shorthand if 语句。
我需要生成 1000 张图像,每张图像的编号都不同。这样做是在网上找到一个脚本可以正常工作,但它不适用于增量前面的 00。
我不能只在每个数字前面加上 00,因为当它达到 10 时,它会执行 0010 而不是我想要的 010。
这意味着我需要稍微更改一下代码。它可能真的很基本,但我就是想不通。可惜没有日志,因为我是运行Photoshop中的脚本
这是我遇到问题的代码。下面是结果:
for (var i=1; i <= numImages; i++) {
if(layer.textItem.contents < 10) {
layer.textItem.contents = "00" + i.toString();
} else if(layer.textItem.contents >= 10) {
layer.textItem.contents = "0" + i.toString();
} else {
layer.textItem.contents = i.toString();
}
SavePNG(directory + imageName + '_'+ i +'.png');
};
非常感谢任何帮助!我不需要用勺子喂食!我需要从错误中吸取教训!
这是脚本中的全部代码(忘记添加了,后来编辑了)
var imageName = 'Oppmoteskjema';
var numImages = 15;
function SavePNG(saveFile){
var pngOpts = new ExportOptionsSaveForWeb;
pngOpts.format = SaveDocumentType.PNG
pngOpts.PNG8 = false;
pngOpts.transparency = false;
pngOpts.interlaced = false;
pngOpts.quality = 10;
activeDocument.exportDocument(new File(saveFile),ExportType.SAVEFORWEB,pngOpts);
}
var layer = activeDocument.layers[0];
if (layer.kind == 'LayerKind.TEXT') {
for (var i=1; i <= numImages; i++) {
layer.textItem.contents = i.toString();
var str = "" + i;
var pad = "000";
var ans = pad.substring(0, pad.length - str.length) + str;
SavePNG(directory + imageName + '_'+ ans +'.png');
}
};```
您可以将数字添加到一串零中,然后根据所需长度对结果字符串进行切片:
var template = "0000";
var num = 0;
var targetNumber = 1000;
for(let i = 0; i <= targetNumber; i++) {
// add i to the template. Javascript will automatically to this type-coerceon since we're adding string + number
let numStr = template + i;
// strip leading zeroes to match the template length
numStr = numStr.slice(numStr.length - template.length);
console.log(numStr);
}
你可以这样试试:
for (var i=1; i <= numImages; i++) {
var str = "" + i;
var pad = "000";
var ans = pad.substring(0, pad.length - str.length) + str;
layer.textItem.contents = ans;
SavePNG(directory + imageName + '_'+ ans +'.png');
};
您可以根据需要更改垫模板。其输出将是:
1 -> 001
97 -> 097
999 -> 999
1234 -> 1234
如果您只是想根据循环索引操作变量,那么下面的内容就足够了。
for (var i = 1; i <= 1000; i++) {
// Result will be '00' | '0' | ''
const result = i < 10 ? '00' : i < 100 ? '0' : '';
// The result is prepended to the current index
// Aka (001, 010, 100)
const contents = result + i;
// Set the text item object contents to value of contents
layer.textItem.contents = contents;
// Saves the Image
SavePNG(directory + imageName + '_' + contents + '.png');
}
这个
i < 10 ? '00' : i < 100 ? '0' : ''
顺便说一下,它是一个三元运算符,它本质上是一个 shorthand if 语句。