【问题标题】:Filter Illustrator page items by property in Javascript在 Javascript 中按属性过滤 Illustrator 页面项目
【发布时间】:2012-08-10 01:58:01
【问题描述】:

我正在尝试操作具有 30,000 个页面项目的 Illustrator 文档中的某些页面项目。我试图避免遍历每一个。与此 AppleScript 等效的 Javascript 是什么?

set xxx to every page item whose note = "John"

第一页项目的注释值示例如下:

set xxx to (do javascript "app.activeDocument.pathItems[0].note")

最终,我只需要数组的计数(长度)。

在快速浏览了一个教程后,我将其拼凑成 Javascript 示例。这是获得结果的唯一方法吗?

docRef = app.activeDocument;

var pathLength = docRef.pathItems.length;

var hitList = []
for (i = 0; i<pathLength; i++)

{
if (docRef.pathItems[i].note= "John")
{
 hitList.push(i)   
}
}

alert(hitList.length)

【问题讨论】:

  • 你想避免什么样的循环?显然,某处必须有一个循环!
  • 如您所知,我不熟悉 Javascript。我在我的问题中发布的 AppleScript 命令完成了任务,而无需(显式)循环遍历每个项目来测试属性的值。是否有 javascript 等效项用于在不进入循环的情况下搜索对象数组以获取特定属性?
  • 不,JS 没有像 AppleScript 那样的隐式循环。您是否有任何理由试图避免 for 循环?只有 3 个字符。
  • 哈。我担心单独检查 30,000 个项目的属性需要花费的时间。
  • 没有办法避免检查所有这些属性。 AppleScript 循环通过它们或 JavaScript 循环。

标签: javascript adobe-illustrator


【解决方案1】:

有一种称为 Lambda 表达式的技术可以为您工作。您要查找的 Lambda 表达式类型是具有标准查询操作的 Lambda。基本上你要做的是拉回 docRef.pathItems[i].note= "John"

的项目列表

第一个链接将使您更好地了解 C# 中的 Lambda 表达式 http://msdn.microsoft.com/en-us/library/bb397687.aspx

第二个链接将为您指明在哪里可以找到类似于 C# 的 Javascript lambda 表达式构建器 Is there a C#-like lambda syntax in JavaScript?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 2017-09-24
    • 2017-06-09
    • 1970-01-01
    • 2020-08-03
    相关资源
    最近更新 更多