Вы можете использовать функцию для каждой требуемой части фильтра и использовать эту функцию для проверки продуктов на фильтрацию.
var elements = e.target.elements,
fName = elements.name.value.trim().toLowerCase(),
fPrice = +elements.price.value,
fCategory = elements.categories.value,
fMaxPrice = +document.querySelector(".filter-price").max,
filters = [],
products = [
{
category: 'sport',
price: 42,
name: 'shorts'
},
// more products
],
filtered;
if (fName) {
filters.push(o => o.name.includes(fName));
}
if (fCategory) {
filters.push(o => o.category === fCategory);
}
if (!isNaN(fPrice)) {
filters.push(o => o.price <= fPrice);
}
if (!isNaN(fMaxPrice)) {
filters.push(o => o.price <= fMaxPrice);
}
filtered = products.filter(p => filters.every(f => f(p)));