字符串替换函数没有响应
String replace function isnt responding
我正在用JS编写一个photoshop脚本,此时我要求用户选择和文件夹位置并将所有这些文件添加到数组中。然后我希望解析数组,以便只保留文件名。
我收到此错误:文件列表[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
S
发生错误是因为您需要一个字符串,但它不是一个字符串。
http://jongware.mit.edu/idcs5js_html_3.0.3i/idcs5js/pc_Folder.html 说getFiles
返回文件和文件夹对象的数组,如果此对象的引用文件夹不存在,则返回 null。
幸运的是,File
和Folder
都具有以下属性:
- fsName - 引用文件的特定于平台的完整路径名
- fullName - 引用的文件的完整路径名,采用 URI 表示法。
- name - 引用文件的绝对 URI 的文件名部分,不带路径规范
当然,如果您不想要任何路径,而只想要文件名,请使用 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
。 (当然,你认为你正在做字符串数组到字符串数组。 这也将简化删除文件夹索引等的任何问题。
相关文章:
- 存储$http如何从$http函数(Angularjs)外部获取可访问变量中的响应
- 仅在响应视图中激发jQuery函数
- 使用来自不同异步函数的响应创建一个json对象
- 如何执行ajax响应返回的javascript函数
- php函数的XMLHttpRequest响应不包含任何数据
- 获取javascript函数中另一个javascript函数的响应
- 如何发送作为节点请求响应函数中的代码块的响应
- jquery返回ajax响应和用户定义的变量到函数
- 使用命名函数设置多个事件响应
- 如何等待javascript函数响应
- $http.post() angularjs 响应函数未按正确的顺序执行
- 未调用主干解析ajax响应函数
- AngularJS HTTP 资源 - 响应函数未定义
- 如何将 Rails 变量传递给 AJAX 响应函数
- 我无法让我的按钮响应函数
- 使用Cheerio和Response for Node web scraper,将响应函数结果传递给视图
- 在主页中创建按钮以重定向到响应函数
- 转换node.js HTTP响应函数(使用"request"库)来使用流
- Raphael.js弃用函数和响应函数的替代方案
- Angular 1.5 Scope变量在PouchDB响应函数中不起作用