Javascript 中用于自动化 (JXA) "whose()" 的比较/丰富查询
Comparisons / Rich queries in Javascript for Automation (JXA) "whose()"
如果我想查看我的 OS X 日历(以前的 "iCal")以查找摘要为 "Lunch" 的事件,我可以这样做:
var eventsContainer = Application('Calendar').calendars[0].events
for (var i = 0; i < eventsContainer.length; i++) {
var thisEvent = eventsContainer[i];
if (thisEvent.summary() == 'Lunch') { doSomething() }
}
即使考虑到这只搜索第一个日历这一事实,它也非常非常非常慢,因为每个 iCal 事件都需要转换为 Javascript 到 运行 的对象。这是一个明显更快的公式:
var foundEvents = Application('Calendar').calendars.events.whose({summary: 'Lunch'});
这对于精确匹配非常有用 summary == 'Lunch'
。但是 endDate: > new Date()
或 summary: /lunch/i
这样的比较呢?是否可以将本机 (ObjC) 代码传递给 whose() 选择器? whose()
是否有任何有用的文档?
相关文档原来在 OS X 10.10 的应用程序间通信发行说明中:https://developer.apple.com/library/mac/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/Articles/OSX10-10.html
whose()
参数中对象的右侧可以采用另一个单元素对象,其中左侧给出一个运算符,右侧给出一个值。例如:
.calendars.events.whose({summary: {_beginsWith: 'Lunch'}});
或者就我而言,查找从今天开始的活动:
var startOfDay = new Date();
startOfDay.setHours(0);
startOfDay.setMinutes(0);
startOfDay.setSeconds(0);
startOfDay.setMilliseconds(0);
var endOfDay = new Date();
endOfDay.setHours(23);
endOfDay.setMinutes(59);
endOfDay.setSeconds(59);
endOfDay.setMilliseconds(999);
var events = Application('Calendar').calendars.events.whose({
_and: [
{ startDate: { _greaterThan: startOfDay }},
{ startDate: { _lessThan: endOfDay }}
]
});
var convertedEvents = events();
for (var cal of convertedEvents) {
for (var ev of cal) {
console.log(ev.summary());
}
}
如果我想查看我的 OS X 日历(以前的 "iCal")以查找摘要为 "Lunch" 的事件,我可以这样做:
var eventsContainer = Application('Calendar').calendars[0].events
for (var i = 0; i < eventsContainer.length; i++) {
var thisEvent = eventsContainer[i];
if (thisEvent.summary() == 'Lunch') { doSomething() }
}
即使考虑到这只搜索第一个日历这一事实,它也非常非常非常慢,因为每个 iCal 事件都需要转换为 Javascript 到 运行 的对象。这是一个明显更快的公式:
var foundEvents = Application('Calendar').calendars.events.whose({summary: 'Lunch'});
这对于精确匹配非常有用 summary == 'Lunch'
。但是 endDate: > new Date()
或 summary: /lunch/i
这样的比较呢?是否可以将本机 (ObjC) 代码传递给 whose() 选择器? whose()
是否有任何有用的文档?
相关文档原来在 OS X 10.10 的应用程序间通信发行说明中:https://developer.apple.com/library/mac/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/Articles/OSX10-10.html
whose()
参数中对象的右侧可以采用另一个单元素对象,其中左侧给出一个运算符,右侧给出一个值。例如:
.calendars.events.whose({summary: {_beginsWith: 'Lunch'}});
或者就我而言,查找从今天开始的活动:
var startOfDay = new Date();
startOfDay.setHours(0);
startOfDay.setMinutes(0);
startOfDay.setSeconds(0);
startOfDay.setMilliseconds(0);
var endOfDay = new Date();
endOfDay.setHours(23);
endOfDay.setMinutes(59);
endOfDay.setSeconds(59);
endOfDay.setMilliseconds(999);
var events = Application('Calendar').calendars.events.whose({
_and: [
{ startDate: { _greaterThan: startOfDay }},
{ startDate: { _lessThan: endOfDay }}
]
});
var convertedEvents = events();
for (var cal of convertedEvents) {
for (var ev of cal) {
console.log(ev.summary());
}
}