When coercing JavaScript "array-like" objects into Java arrays, only indexed properties are preserved, and named properties are shaved off. Also, passing an arbitrary JavaScript dictionary object via ...
abstract continue for new switch assert default goto* package synchronized boolean do if private this break double implements protected throw byte else import public throws case enum instanceof return ...
When data is read far more often than written, you can afford to organize it once and reuse that work on every query.