我正在用JS编写一个photoshop脚本,此时我要求用户选择文件夹位置并将所有这些文件添加到数组中。我希望然后解析数组,只保留文件名。
我收到此错误: fileList [i] .replace不是函数
我想它是由于我传递了错误的值或使用了错误的类型。希望有人能解释这个问题并帮我解决它吗?
//Prompt for folder location
var Path = Folder.selectDialog("Select Folder Location for Renders")
// Use the path to the application and append the samples folder
var samplesFolder = Folder(Path)
var fileList = samplesFolder.getFiles()
for (var i = 0; i < fileList.length; i++)
{
fileList[i] = fileList[i].replace(/^.*[\\\/]/, '')
}
prompt("Complete")
感谢您的时间,AtB
取值
答案 0 :(得分:2)
错误正在发生,因为你期待一个字符串,而不是一个字符串。
http://jongware.mit.edu/idcs5js_html_3.0.3i/idcs5js/pc_Folder.html说getFiles
返回File和Folder对象的数组,如果此对象的引用文件夹不存在,则返回null。
幸运的是,File
和Folder
都有这些属性:
当然,如果您不想要任何路径,只想要文件名,请使用name
,否则,请使用适合您的replace
命令 - fsName
或fullName
。
所以 - 在你的循环中,你想要:
fileList[i] = fileList[i].name
您可能希望过滤掉最终结果中的文件夹。这将在你的循环中带来类似的东西:
if (fileList[i] instanceof Folder) {
fileList.splice(i, 1);
--i; // go back one i, because you just removed an index. Note, if you're not careful, such shenanigans may mess up the second term of the for loop.
continue;
}
最后一个建议:我个人觉得制作一个新阵列更清洁,而不是替换位置。这种语言当然支持你正在做的事情,但它仍然让我从File or Folder array
转到string array
。 (当然,你以为你正在对字符串数组进行字符串数组。)这也可以简化删除文件夹索引等方面的任何问题。