Function that loops through array parameter values to build multiple WHERE clauses (postgres 11.4)
The parameters in the array may be transformed into a table
to be be joined against the rest. This transformation is
done with the unnest function and the WHERE conditions can then be expressed as
JOIN clauses.
This could also be done by joining with generate_subscripts($1, 1) but that leads to more complicated syntax for no apparent benefit.
select ...&lt;same as your query&gt;...
from locations loc
left outer join sales_events se ON loc.id = se.location_id
left outer join junction_products jp ON jp.sales_event_id = se.id
left outer join products p ON p.id = jp.product_id
join unnest($1) params ON (p.sku=params.sku AND p.manufacturer=params.manufacturer)
WHERE location_id = $2
group by se.created_at
order by se.created_at

Note: this query leaves the left outer join as they are in the original query because the question is not about them, but it seems they should be inner joins instead.
The reason is that WHERE clauses like  p.sku = '12345' and p.manufacturer = 'CompanyA'
imply that these columns in p cannot be NULL, but that negates the reason why you'd use an outer join versus an inner join, which is having NULL columns added for non-matching rows from each table at the right side of each left join.
In short, if you're not sure why this query uses left outer join, consider replacing them  with join.