my case for jq:
it has arrays, but these are more like APL's boxes. the core of jq works on streams.
while map(filter) has to be manually called on arrays, a filter, like a function, auto-maps (it doesn't *exactly* have scalar extension, but the filter . + 1 will increment everything in the stream). It is functional, without even re-assignment, and it supports "operators" because user-defined functions/filters can take other filters as arguments.