I am working on a filter with javascript. I have a json object of all data and filters in json as well. I need to apply that filter with between for example filter all the data which has price between 50-100.
Sample data is like this
var filterEvents = [
{id:1,price:25},
{id:2,price:45},
{id:3,price:57},
{id:4,price:80},
{id:5,price:105},
{id:6,price:200}
];
Filters json looks like this
var budgets =["1","2","3","4","5"]; // 1 for <30 , 2 for 31-50, 3 for 51-100, 4 for 101-150, 5 for 151+
Filter json can have any number of data
I am trying it with this if else condition.
var filterEvents = [
{id:1,price:25},
{id:2,price:45},
{id:3,price:57},
{id:4,price:80},
{id:5,price:105},
{id:6,price:200}
];
//var budgets =["1","2","3","4","5"]; // 1 for <30 , 2 for 31-50, 3 for 51-100, 4 for 101-150, 5 for 151+
var budgets =["1","2","3"];
//var budgets =["1","2"];
//var budgets =["1"];
if(budgets.includes('1') && !budgets.includes('2')&& !budgets.includes('3')&& !budgets.includes('4') && !budgets.includes('5'))
{
filterEvents = filterEvents.filter(element => {
return element.price <= 30 ;
});
}
else if(budgets.includes('1') && budgets.includes('2')&& !budgets.includes('3')&& !budgets.includes('4') && !budgets.includes('5'))
{
filterEvents = filterEvents.filter(element => {
return element.price <= 50 ;
});
}
else if(budgets.includes('1') && budgets.includes('2')&& budgets.includes('3')&& !budgets.includes('4') && !budgets.includes('5'))
{
filterEvents = filterEvents.filter(element => {
return element.price <= 100 ;
});
}
else if(budgets.includes('1') && budgets.includes('2')&& budgets.includes('3')&& budgets.includes('4') && !budgets.includes('5'))
{
filterEvents = filterEvents.filter(element => {
return element.price <= 150 ;
});
}
else if(budgets.includes('1') && budgets.includes('2')&& budgets.includes('3')&& budgets.includes('4') && budgets.includes('5'))
{
}
if(!budgets.includes('1') && !budgets.includes('2')&& !budgets.includes('3')&& !budgets.includes('4') && budgets.includes('5'))
{
filterEvents = filterEvents.filter(element => {
return element.price >150 ;
});
}
if(!budgets.includes('1') && !budgets.includes('2')&& !budgets.includes('3')&& budgets.includes('4') && budgets.includes('5'))
{
filterEvents = filterEvents.filter(element => {
return element.price >100 ;
});
}
if(!budgets.includes('1') && !budgets.includes('2')&& budgets.includes('3')&& budgets.includes('4') && budgets.includes('5'))
{
filterEvents = filterEvents.filter(element => {
return element.price >50 ;
});
}
if(!budgets.includes('1') && budgets.includes('2')&& budgets.includes('3')&& budgets.includes('4') && budgets.includes('5'))
{
filterEvents = filterEvents.filter(element => {
return element.price >30 ;
});
}
if(budgets.includes('1') && !budgets.includes('2')&& budgets.includes('3')&& !budgets.includes('4') && !budgets.includes('5'))
{
filterEvents = filterEvents.filter(element => {
return element.price <=30 || element.price >50 && element.price<100 ;
});
}
if(budgets.includes('1') && !budgets.includes('2')&& budgets.includes('3')&& budgets.includes('4') && budgets.includes('5'))
{
filterEvents = filterEvents.filter(element => {
return element.price <=30 || element.price >50 ;
});
}
console.log(filterEvents);
Here is the working JSfiddle
The issue in this code is a will need to add all the conditions and it could stop working for some data. I am finding a more accurate solution.