Javascript Photoshop一一删除路径的bug?

Posted

技术标签:

【中文标题】Javascript Photoshop一一删除路径的bug?【英文标题】:Javascript Photoshop delete paths one by one bug? 【发布时间】:2018-03-15 12:09:12 【问题描述】:

Photoshop CC 2017。使用此循环一一删除路径会导致仅删除某些路径(共 8 条):

 for(i = 0; i < app.activeDocument.pathItems.length; i++) 
             alert(i)
             app.activeDocument.pathItems[i].remove();
           

长度被报告为 8。但是 alert(i) 只显示 4 次。只有在多次运行循环时才会删除所有路径。我将它们一一删除,因为我想保留具有特定名称的路径。有什么想法吗?

【问题讨论】:

Looping through array and removing items, without breaking for loop的可能重复 基本上,您正在删除一个项目,这会减少.length。您还增加了 i,所以当您的 i = 4 时,您的数组中只剩下 4 个项目,所以它完成了。 谢谢Ivar,这就是解决方案! 【参考方案1】:

当你循环遍历它时,你正在改变pathItems。当您删除项目 i 时,将在位置 i 处有一个您跳过的新项目。 如果你向后循环,它不会造成任何问题

 for(i = app.activeDocument.pathItems.length -1; i >= 0; i--) 
    alert(i)
    app.activeDocument.pathItems[i].remove();
  

【讨论】:

是的,这也有效。我还发现使用 Ivar 的评论可以向后循环遍历数组。如果我想保留某个元素(具有某个名称),我相信使用 while 循环删除 [0] 元素会导致问题。【参考方案2】:

在这种情况下,您可以使用pathItems.removeAll()

【讨论】:

我正在一个一个地删除它们,因为我想保留一个具有特定名称的路径。

以上是关于Javascript Photoshop一一删除路径的bug?的主要内容,如果未能解决你的问题,请参考以下文章

通过JavaScript更改Photoshop中的标尺原点

Photoshop Javascript 的奇怪行为

使用扩展脚本(javascript)如何从 Photoshop 颜色表中获取颜色值

javascript Dataset para Photoshop

Photoshop JavaScript 图层创建

JavaScript 适用于Adobe Photoshop CS2的图像缩放器