如何使用AppleScript创建嵌套数组并按指定ID提取对应元素
问题1:循环迭代拼接异常修复
根因
AppleScript中直接使用&操作符拼接列表和**记录(Record,即你定义的带键值的TaskX结构)**时,会默认将记录的所有属性拆解为独立元素追加到列表,而非将整条记录作为单个元素存入,因此迭代结束后TagList结构不符合预期,看起来仅保留了最后一次迭代的元素。
修复方案
将每次要追加的TaskX用花括号包裹为单元素列表后再拼接,修改对应代码行即可:
set TagList to {} repeat with i from 1 to count of AllTasks set taskName to item i of AllTasks [SNIP] set TaskX to {|name|:taskName, Duedate:taskDue, |Note|:taskNote, |id|:taskId} -- 仅修改下一行,将TaskX包裹为列表后拼接 set TagList to TagList & {TaskX} end repeat
修改后TagList就是标准的嵌套结构,每个元素都是包含完整属性的任务记录。
问题2:按id条件提取对应taskName实现
使用AppleScript的whose筛选从句即可快速匹配目标元素,示例代码如下:
-- 先判断是否存在匹配的元素,避免匹配不到时报错 if exists (first item of TagList whose |id| is "xzy") then set targetName to |name| of (first item of TagList whose |id| is "xzy") -- 这里可以直接使用targetName变量 else -- 无匹配id的自定义处理逻辑 set targetName to "" end if
内容的提问来源于stack exchange,提问作者MBUST
相关产品推荐
相关产品推荐

