How do I select by a JSONB array containing at least one element within a range?
You need to use a sub-query that unnests all array elements together with an EXISTS predicate:

select p.*
from products p
where exists (select *
              from jsonb_array_elements(p.properties-&gt;'weight') as t(weight)
              where t.weight::int &lt;@ range(50, 150));