Not sure what its history is, but I’ve seen OmniFocus plugins by a couple of different contributors using this rather complex and slightly unexpected incantation:
var conditionsArray = [
eval(selection.tasks.length > 0),
eval(selection.projects.length > 0),
eval(selection.tags.length > 0),
];
return conditionsArray.includes(true);
and fortunately we don’t need to do this kind of thing at all,
because JS Arrays have a couple of very useful built-in methods
which do it all for us for free, and more safely:
.some()
.every()
So here, we could ease our task with expressions like:
[
selection.tasks,
selection.projects,
selection.tags
].some(x => x.length > 0)
or if brevity, or the avoidance of repetition, are your preference, then perhaps:
["tasks", "projects", "tags"].some(
k => selection[k].length > 0
)
Footnote:
A thousand voices from every direction continually (and quite stridently) warn us against ever using eval
.
On the very rare occasions where something like it does seems to be inevitable, it’s usually better to look up the documentation of the Function
constructor:
[Function - JavaScript | MDN]
(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function)