论坛帮助 |
社区圈子 |
日历事件 |
2024-06-22, 11:14 | #1 | ||
|
|||
正式会员
等级: 四袋长老
|
VAR M2=WX N003 191059G VAR M3=WX N005 191059G VAR M4=WX N017 191059G VAR M5=WX N025 191059G VAR M6=WX N030 191059G VAR M7=WX N100 191059G VAR M8=WX N236 191059G 求助大神上面有8个字符串,用AI脚本比较,比较字符串第一个空格与第二个空格间的字符,用N接收他们数字部分最大的字符串,N1接收字符串所在名称 上面 脚本运行,结果N=236 N1=WX N236 191059G |
||
回复时引用此帖 |
2024-06-24, 15:50 | 只看该作者 #2 | ||
|
|||
正式会员
等级: 四袋长老
|
引用:
WX 天N003 191059G WX 天N005 191059G WX 天N017 191059G WX 天N025 191059G WX 天N030 191059G WX 天N100 191059G WX 天N236 191059G 如果E:/NN这里有上面这8个是文件 var doc=app.activeDocument; var folderPath = "E:/NN/"; var cityNames = ["天"]; //alert(cityNames); var Maximum; var result = checkFilesInFolder(folderPath, cityNames); alert(result); function checkFilesInFolder(folderPath, cityNames) { var folder = new Folder(folderPath); var files = folder.getFiles(); for (var i = 0; i < files.length; i++) { var file = files[i]; var fileName = file.fullName; for (var j = 0; j < cityNames.length; j++) { var cityName = cityNames[j]; if (fileName.indexOf("天") !== -1) { var Modesecond=fileName.split(" ").slice(1,2); var Maximum=Maximum >=Modesecond ? Maximum : Modesecond; alert(Maximum); } } } for (i = 0; i < files.length; i++) { var subFolder = files[i]; if (subFolder instanceof Folder) { var result = checkFilesInFolder(subFolder.absoluteURI, cityNames); if (result === Maximum) { return Maximum; } } } return 0; } 我预期的结果是函数返回值="天N236",但上面的代码函数内部测试值Maximum是对的,但返回值不对,求大神指点一下。 |
||
回复时引用此帖 |
2024-06-25, 14:33 | 只看该作者 #4 | ||
|
|||
中级会员
等级: 六袋长老
|
你的代码有两个主要问题。 首先,你需要赋予Maximum一个初始值。在你入口函数checkFilesInFolder开始处,你需要赋值,比如var Maximum = -Infinity。这样,当你第一次进行比较的时候,你就有了一个开始的比较值。 然后,你期望函数返回的是整个字符串(如"天N236"),但Maximum在初始化和后续比较过程中,赋值的都是数字部分。所以,你在最后返回Maximum的时候,其实返回的是找到的最大的数字部分,而不是包含这个数字部分的整个字符串。 为了解决这个问题,我推荐同时存储数字部分以及对应的字符串。每次找到更大的数字部分的时候,同时更新存储的字符串。以下是我修改后的代码: var doc = app.activeDocument; var folderPath = "E:/NN/"; var cityName = "天"; var Maximum = -Infinity; var MaxStr = ""; function checkFilesInFolder(folderPath, cityName) { var folder = new Folder(folderPath); var files = folder.getFiles(); for (var i = 0; i < files.length; i++) { var file = files[i]; var fileName = file.name; if (fileName.indexOf(cityName) !== -1) { // 注意这里需要使用parseInt将字符串转为数字进行比较 var num = parseInt(fileName.split(" ")[1].slice(1)); // 判断是否需要更新 if(num > Maximum) { Maximum = num; MaxStr = fileName; } } } for (i = 0; i < files.length; i++) { var subFolder = files[i]; if (subFolder instanceof Folder) { checkFilesInFolder(subFolder.absoluteURI, cityName); } } } checkFilesInFolder(folderPath, cityName); alert(MaxStr); |
||
回复时引用此帖 |
右列会员因为此帖价值甚高向 zhgx998@163.com 表示感谢: |
yzx0120 (2024-06-25)
|
2024-06-26, 00:51 | 只看该作者 #6 | ||
|
|||
中级会员
等级: 七袋长老
|
引用:
"WX N004 191059G", "WX N003 191059G", "WX N005 191059G", "WX N017 191059G", "WX N025 191059G", "WX N030 191059G", "WX N100 191059G", "WX N236 191059G" ]; var maxNum = -Infinity; var maxString = ""; for (var i = 0; i < strings.length; i++) { var parts = strings[i].split(' '); var num = parseInt(parts[1].substring(1)); if (num > maxNum) { maxNum = num; maxString = strings[i]; } } alert( maxNum + maxString); 试一下这个 |
||
回复时引用此帖 |
2024-06-26, 19:05 | 只看该作者 #7 | ||
|
|||
中级会员
等级: 七袋长老
|
引用:
上面的代码这行修改成 alert( maxNum + "\r\n" + maxString); 这样得到的结果更直观 |
||
回复时引用此帖 |
右列会员因为此帖价值甚高向 姜椒蒜 表示感谢: |
yzx0120 (2024-06-28)
|