为什么某些返回的数组在 JXA 中受到限制(Javascript for Automation in macOS)

Why are some returned arrays limited in JXA (Javascript for Automation in macOS)

我尝试通过 JXA 脚本从应用 "Messages" 获取我所有的 iMessage 联系人。 当我将数组分配给一个变量时,我只能处理前 40 个对象。但是数组的长度是 147.

var Messages = Application("Messages")
var buddies = Messages.buddies()

console.log(buddies.length) // == 147

当我转到脚本编辑器底部的 "replies" 选项卡时,我可以看到所有 147 个好友:

app.buddies()
    --> [app.buddies.byId(...), ...]

但是当我尝试使用索引大于 39 的数组中的对象时,出现错误 -1728(未找到对象),例如

console.log(buddies[45].id())

怎么了? 获取所有好友ID的正确方法是什么?

当然有区别

Messages.buddies()

(返回数组的函数调用),以及

Messages.buddies

(对好友对象的引用)。

您应该能够通过直接在 .buddies 对象上调用一次 .id() 方法来获得完整的 ID 列表。

(() => {
    'use strict';

    const
        Messages = Application("Messages"),
        refBs = Messages.buddies;

    return refBs.id();

})();