There is no ready-made method to do that, therefore you should make your own sorted list of effects.
However, it appears that the app.effects array seems to be already sorted by category, that is, all effects belonging to the same category appear in blocks.
It is not stated in the scripting guide, but since the sorting of an array of 500+ entries cannot be by chance, i would trust it, it allows to store much less things.
For instance, you could store the index start(inclusive)/end(exclusive) of each category in an object:
var rangeTable = {
“3D Channel” : {start: 0, end: 7},
“Audio” : {start: 7, end: 17},
“Blur & Sharpen” : {start: 17, end: 34},
/*etc*/
};
and fill the dropdown with those infos. Here is a function that would create that object:
var NO_CATEGORY = "(No Category)"; // or something else, up to you
function getCategoriesRangeTable(){
var table = {};
var effects = app.effects, i=0, I=effects.length, k;
while (i
Xavier
(edit: part of the code didnt display correctly...)